2012-05-24 15 views
7

Więc zacząłem uczyć się java kilka dni temu i dostałem pytanie. Dla następnego wyrażenia:W jaki sposób System.out.printIn() może akceptować liczby całkowite?

String foo=123; 

jest niedozwolone. Jednak w System.out.printIn(), możemy użyć czegoś takiego:

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

Od niejawnie przypisanie liczby całkowitej na ciąg nie jest dozwolone, dlaczego wyrażenie powyżej pracach? Ktoś może podać szczegółowe wyjaśnienie? Zastanawiam się też, kiedy możemy użyć tego rodzaju ukrytej rzeczy, a kiedy nie możemy.

+1

Przeczytaj to: http://meta.stackexchange.com/questions/5234/ –

Odpowiedz

9

Istnieje wiele metod przeciążonych z 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

Co to jest (obiekt x)? Szablon dowolnego rodzaju obiektów? – OneZero

+1

@ user1229490 Użyje metody 'Object.toString()' niezależnie od tego, co do niej przekażesz. – Jivings

3

Statyczny członkiem out klasy System jest PrintStream który ma metodę z podpisu println(int).

13

Powód, dla którego można wywołać println z liczbą całkowitą, jest spowodowany przeciążeniem metody. Zasadniczo istnieje więcej niż jedna metoda o nazwie println i jedna z nich akceptuje liczbę całkowitą.

Spójrz tutaj: PrintStream

+0

Dlaczego JDK 1.4.2 jako odniesienie? Jesteśmy już w JDK 7, a niedługo pojawi się 8. Być może odniesienie do JDK 6 lub 7 byłoby lepsze. –

+1

@edalorzo Masz rację. Zaktualizowałem odpowiedź. – MAV

3

Spójrz na API dla PrintStream (System.out jest PrintStream). Ma metod println(), println(boolean), println(char), println(char[]), println(double), println(float), println(int), println(long), println(Object) i println(String). Nazywa się to method overloading (przewiń w dół, aby znaleźć rozdział dotyczący przeciążania metod).

Jeśli chcesz utworzyć String z całkowitą dosłownym, można umieścić cudzysłowy wokół niego (String s = "123";) lub użyć Integer.toString (String s = Integer.toString(123);) lub String.valueOf (String s = String.valueOf(123);).

1

Zakładam, że nie znaczysz println, a nie printin, java ma funkcję println dla każdego typu danych, więc możesz wywołać println na booleanach, intach, łańcuchach, itd. I wybierze odpowiednią funkcję. oczywiście nie można przypisać liczby całkowitej do zmiennej łańcuchowej, ponieważ są to różne typy.

Powiązane problemy