私たちはオブジェクトを印刷するたびにtoString
がJava
に呼び出されたことを知って、それがすべてのクラスのスーパークラスであるObject
クラスで定義されたデフォルトです。toStringはプリミティブ型に対しても呼び出されますか?
しかし私の先生は、primitive type
(int, char
など)を印刷すると、toString
とも呼ばれています。
本当ですか?
私たちはオブジェクトを印刷するたびにtoString
がJava
に呼び出されたことを知って、それがすべてのクラスのスーパークラスであるObject
クラスで定義されたデフォルトです。toStringはプリミティブ型に対しても呼び出されますか?
しかし私の先生は、primitive type
(int, char
など)を印刷すると、toString
とも呼ばれています。
本当ですか?
はい、ではなく、あなたはそれがあることを期待する意味インチ
System.out.println(someInt)
も行を追加しますprint
ための単なるラッパーです。
System.out.print(someInt)
String.valueOf(someInt)
ひいてはcalls
Integer.toString(someInt)
returns a String
object representing the specified integerことIntegerクラスにa static methodあります。このメソッドはではなくInteger#toString()
と同じであり、Integerオブジェクトをint値を表す文字列に変換するインスタンスメソッドです。
someInt.toString()
は、someInt
はオブジェクトではないため、Object
として拡張されません。
はどのようSystem.out.print(int)
作品を見ることができます。System
APIによるSystem.out
PrintStream
です:
public void print(int i) {
write(String.valueOf(i));
}
そして、これがString
SRCからString.valueOf(int)
です:
public static String valueOf(int i) {
return Integer.toString(i);
}
あれば、我々はそれがint型を出力しますどのように見ることができます
public static final PrintStream out
SRC PrintStream
で次のコードを検討する
System.out.println(5);
public void println(int x) {
synchronized (this) {
print(x);
newLine();
}
}
内部print(x)
機能follows-として
public void print(int i) {
write(String.valueOf(i));
}
と文字列の中に、今あなたがのvalueOfを見れば()関数を呼び出しますと呼ばれるPrintStream
クラスからの機能クラス
public static String valueOf(int i) {
return Integer.toString(i);
}
と
Integer.toString(i)
は、あなたの先生がtoString()メソッドを呼び出すことによってどのようなものかを示しています。
'Integer.toString(i)'は全く自動ボクシングではありません。ここにはオートバイがない。 'println(int)'メソッドがなく、 'println(Object)'のみがあった場合、 'println(5)'によって呼び出され、オートボックスになります。 –
合意!答えを更新しました。 autoboxingは関係しません。 –
素敵で完全な説明。正確なJavaバージョンを追加すると、それがより適切になる可能性がありますが、これはあまり頻繁に変化しないビットです。 – ppeterka
'これは(間接的に、おそらく)呼び出すでしょう。なぜでしょうか? – ppeterka
@ ppeterka66ソースが検索され、完了しました。 – hexafraction
あなたのおかげで...本当にありがとう、これは私の最初の質問だったので – Gagan93