21

オブジェクトを印刷するたびにtoString呼び出され、デフォルトですべてのクラスのスーパークラスであるクラスで定義されていることを知っています。JavaObject

しかし、私の先生は、(など)toStringを印刷するときにも呼び出されると言っています。primitive typeint, char

本当 ?

4

4 に答える 4

50

はい、しかし、あなたが期待するような意味ではありません。

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

于 2013-09-06T10:01:49.167 に答える
24

どのように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);
}
于 2013-09-06T10:17:12.590 に答える
0

プリミティブは、それぞれのオブジェクト タイプに自動ボックス化されます。だからtoString()電話します。

于 2013-09-06T10:03:43.870 に答える