違いはほとんどありません。より短く、より頻繁に機能するものを使用してください。
他の理由で実際にオブジェクトの文字列値を取得する必要があり、null フレンドリーにしたい場合は、次のようにします。
String s = String.valueOf(obj);
編集:質問が拡張されたので、回答を拡張します。
どちらの場合も、コンパイルすると次のようになります。
System.out.println(new StringBuilder().append("obj: ").append(obj).toString());
yourtoString()
が暗黙的である場合、2 番目の追加でそれがわかります。
Java のソース コードを見ると、StringBuilder.append(Object)
次のようになっていることがわかります。
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
次のようになりString.valueOf
ます。
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
ここで、あなたtoString()
自身の場合は、null チェックとスタック フレームをバイパスして、次の手順に直行しますStringBuilder
。
public StringBuilder append(String str) {
super.append(str);
return this;
}
そのため...両方のケースで非常によく似たことが起こります。1つはもう少し仕事をするだけです。