2012-05-24 17 views
7

Così ho iniziato a imparare java diversi giorni fa e ho ricevuto una domanda. Per la prossima espressione:Come può System.out.printIn() accettare numeri interi?

String foo=123; 

non consentito. Tuttavia, in System.out.printIn(), siamo in grado di usare qualcosa come:

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

Poiché l'assegnazione implicitamente un intero in una stringa non è consentito, perché l'espressione sopra funziona? Chiunque può dare una spiegazione dettagliata? Mi sto anche chiedendo quando possiamo usare questo tipo di cosa implicita e quando non possiamo.

+1

Leggere questo: http://meta.stackexchange.com/questions/5234/ –

risposta

9

Ci sono tanti metodi overload del 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

Che cos'è (Object x)? Un modello di qualsiasi tipo di oggetto? – OneZero

+1

@ user1229490 Userà il metodo 'Object.toString()' di qualunque cosa tu passi ad esso. – Jivings

3

Il membro statico out della classe System è un PrintStream che ha un metodo con la firma println(int).

13

Il motivo per cui è possibile chiamare println con un numero intero è perché il metodo è sovraccarico. Fondamentalmente ci sono più di un metodo chiamato println e uno di loro accetta un intero.

dare uno sguardo qui: PrintStream

+0

Perché JDK 1.4.2 come riferimento? Siamo già in JDK 7 e 8 sarà presto rilasciato. Forse un riferimento a JDK 6 o 7 sarebbe meglio. –

+1

@edalorzo Hai ragione. Ho aggiornato la risposta. – MAV

3

Guarda le API per PrintStream (System.out è un PrintStream). Ha metodi println(), println(boolean), println(char), println(char[]), println(double), println(float), println(int), println(long), println(Object) e println(String). Questo è chiamato method overloading (scorrere verso il basso per trovare la sezione sul sovraccarico del metodo).

Se si desidera creare un String da un letterale intero, è possibile mettere le virgolette attorno ad esso (String s = "123";) o utilizzare Integer.toString (String s = Integer.toString(123);) o String.valueOf (String s = String.valueOf(123);).

1

Supponendo che tu non stia stampando e non stampi, java ha una funzione println per ogni tipo di dati, quindi puoi chiamare println su booleani, interi, stringhe, ecc. E selezionerà la funzione corretta. ovviamente non è possibile assegnare un intero a una variabile stringa perché sono tipi diversi.

Problemi correlati