オブジェクトを印刷するたびにtoString呼び出され、デフォルトですべてのクラスのスーパークラスであるクラスで定義されていることを知っています。JavaObject
しかし、私の先生は、(など)toStringを印刷するときにも呼び出されると言っています。primitive typeint, char
本当 ?
はい、しかし、あなたが期待するような意味ではありません。
System.out.println(someInt)
print行を追加するための単なるラッパーです。
System.out.print(someInt)
String.valueOf(someInt)
次に呼び出す
Integer.toString(someInt)
これは、指定された integer を表すオブジェクトを返すInteger クラスの静的メソッドです。このメソッドは、Integer オブジェクトを int 値を表す文字列に変換するインスタンス メソッドであると同じではありません。StringInteger#toString()
someInt.toString()オブジェクトではないため、someInt拡張されないため機能しません。Object
どのようにSystem.out.print(int)機能するか見てみましょう。SystemAPIによる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()電話します。