2012-05-24 21 views
7

Así que empecé a aprender java hace varios días y tiene una pregunta. Para la siguiente expresión:¿Cómo puede System.out.printIn() aceptar enteros?

String foo=123; 

no está permitido. Sin embargo, en System.out.printIn(), podemos usar algo como:

int x=5; 
System.out.println(x); 

Desde asignar implícitamente un entero a una cadena que no está permitido, ¿por qué la expresión anterior las obras? ¿Alguien puede dar una explicación detallada? También me pregunto cuándo podemos usar este tipo de cosas implícitas y cuándo no.

+1

Por favor, lea esto: ¿Cuál es http://meta.stackexchange.com/questions/5234/ –

Respuesta

9

Hay tantos métodos sobrecargados de la PrintStreamSystem.out:

println(boolean x) 
println(char x) 
println(int x) 
println(long x) 
println(float x) 
println(double x) 
println(char x[]) 
println(String x) 
println(Object x) 
+0

(Objeto x)? Una plantilla de cualquier tipo de objetos? – OneZero

+1

@ user1229490 Se utilizará el método 'Object.toString()' de lo que pasa a ella. – Jivings

3

El miembro estático out de la clase System es un PrintStream que tiene un método con la firma println(int).

13

La razón puede llamar println con un entero es porque se sobrecarga el método. Básicamente, hay más de un método llamado println y uno de ellos acepta un entero.

Echa un vistazo aquí: PrintStream

+0

¿Por qué JDK 1.4.2 como referencia? Ya estamos en JDK 7 y 8 pronto será lanzado. Quizás una referencia a JDK 6 o 7 sería mejor. –

+1

@edalorzo Tienes razón. He actualizado la respuesta. – MAV

3

Mira la API para PrintStream (System.out es una PrintStream). Tiene métodos println(), println(boolean), println(char), println(char[]), println(double), println(float), println(int), println(long), println(Object) y println(String). Esto se llama method overloading (desplácese hacia abajo para encontrar la sección sobre sobrecarga de métodos).

Si desea crear un String de un literal entero, puede poner comillas alrededor de él (String s = "123";) o utilizar Integer.toString (String s = Integer.toString(123);) o String.valueOf (String s = String.valueOf(123);).

1

Supongo que no quiere imprimir, no imprim, java tiene una función println para cada tipo de datos, por lo que puede llamar a println en booleanos, ints, cadenas, ect y seleccionará la función correcta. , por supuesto, no se puede asignar un entero a una variable de cadena, ya que son diferentes tipos.

Cuestiones relacionadas