Tenemos la mejor información que descubrimos online. Esperamos que te sirva de ayuda y si quieres comentarnos algo que nos pueda ayudar a crecer hazlo con libertad.
Solución:
System.out
es solo una instancia de PrintStream
. Puede consultar su JavaDoc. Su variabilidad se basa en sobrecarga de métodos (múltiples métodos con el mismo nombre, pero con diferentes parámetros).
Este flujo de impresión está enviando su salida a los llamados salida estándar.
En tu pregunta mencionas una técnica llamada funciones variadicas (o Varargs). Desafortunadamente eso no es compatible con PrintStream#print
, por lo que debe estar confundiendo esto con otra cosa. Sin embargo, es muy fácil implementarlos en Java. Solo revisa la documentación.
Y si tiene curiosidad sobre cómo sabe Java cómo concatenarstring Variables "foo" + 1 + true + myObj
es principalmente responsabilidad de un compilador de Java.
Cuando no hay ninguna variable involucrada en la concatenación, el compilador simplemente concatena el string. Cuando hay una variable involucrada, la concatenación se traduce en StringBuilder#append
cadena. No hay ninguna instrucción de concatenación en el código de bytes resultante; es decir, el +
operador (cuando se habla de string concatenación) se resuelve durante la compilación.
Todos los tipos en Java se pueden convertir a string (int
a través de métodos en Integer
clase, boolean
a través de métodos en Boolean
clase, objetos a través de su propia #toString
, …). Puede consultar el código fuente de StringBuilder si está interesado.
ACTUALIZAR: Yo mismo tenía curiosidad y verifiqué (usando javap) cuál era mi ejemplo System.out.println("foo" + 1 + true + myObj)
compila en. El resultado:
System.out.println(new StringBuilder("foo1true").append(myObj).toString());
Aunque parezca como si System.put.print...()
tomar un número variable de argumentos no lo hace. Si miras de cerca, el string simplemente se concatena y puedes hacer lo mismo con cualquier string. Lo único que sucede es que los objetos que está pasando se convierten implícitamente en un string por java llamando al toString()
método.
Si intentas hacer esto, fallará:
int i = 0;
String s = i;
System.out.println(s);
La razón es porque aquí no se realiza la conversión implícita.
Sin embargo, si lo cambia a
int i = 0;
String s = "" + i;
System.out.println(s);
Funciona y esto es lo que sucede cuando se usa System.put.print...()
también.
Si desea implementar un número variable de argumentos en Java para imitar algo como C printf
puedes declararlo así:
public void t(String s, String ... args)
String val = args[1];
Lo que sucede aquí es que un array of Strings se pasa, con la longitud de los argumentos proporcionados. Aquí Java puede hacer la verificación de tipos por usted.
Si realmente quieres un printf, entonces tienes que hacerlo así:
public void t(String s, Object ... args)
String val = args[1].toString();
Entonces tendría que emitir o interpretar los argumentos en consecuencia.
Es un punto muy sensible para entender cómo funciona System.out.print. Si el primer elemento es String, entonces el operador más (+) funciona como operador de concatenación de cadenas. Si el primer elemento es un número entero más (+), el operador funciona como operador matemático.
public static void main(String args[])
System.out.println("String" + 8 + 8); //String88
System.out.println(8 + 8+ "String"); //16String
Ten en cuenta compartir esta sección si te valió la pena.