オブジェクトを印刷するたびにtoString
呼び出され、デフォルトですべてのクラスのスーパークラスであるクラスで定義されていることを知っています。Java
Object
しかし、私の先生は、(など)toString
を印刷するときにも呼び出されると言っています。primitive type
int, char
本当 ?
はい、しかし、あなたが期待するような意味ではありません。
System.out.println(someInt)
print
行を追加するための単なるラッパーです。
System.out.print(someInt)
String.valueOf(someInt)
次に呼び出す
Integer.toString(someInt)
これは、指定された integer を表すオブジェクトを返すInteger クラスの静的メソッドです。このメソッドは、Integer オブジェクトを int 値を表す文字列に変換するインスタンス メソッドであると同じではありません。String
Integer#toString()
someInt.toString()
オブジェクトではないため、someInt
拡張されないため機能しません。Object
どのようにSystem.out.print(int)
機能するか見てみましょう。System
APIによるSystem.out
と、次のPrintStream
とおりです。
public static final PrintStream out
srcではPrintStream
、int がどのように出力されるかを確認できます。
public void print(int i) {
write(String.valueOf(i));
}
そして、これはsrcString.valueOf(int)
からのものです:String
public static String valueOf(int i) {
return Integer.toString(i);
}
プリミティブは、それぞれのオブジェクト タイプに自動ボックス化されます。だからtoString()
電話します。