Es gibt wenig Unterschied. Verwenden Sie den, der kürzer ist und öfter arbeitet.
Wenn Sie tatsächlich den String-Wert eines Objekts aus anderen Gründen erhalten möchten, und wollen, dass es null, freundlich zu sein, dies tun:
String s = String.valueOf(obj);
bearbeiten: Die Frage wurde erweitert, so dass ich lch erweitere meine Antwort.
In beiden Fällen kompilieren sie in etwa wie folgt:
System.out.println(new StringBuilder().append("obj: ").append(obj).toString());
Wenn Ihr toString()
implizit ist, Sie, dass in der zweiten append sehen werden.
Wenn Sie sich den Quellcode zu Java anschauen, werden Sie sehen, dass StringBuilder.append(Object)
wie folgt aussieht:
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
wo String.valueOf
wie folgt aussieht:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Nun, wenn Sie toString()
selbst umgehen Sie einen Null-Check und einen Stack-Frame und gehen direkt zu diesem in StringBuilder
:
public StringBuilder append(String str) {
super.append(str);
return this;
}
Also ... passiert in beiden Fällen sehr ähnliches. Man macht nur ein bisschen mehr Arbeit.
warum ist es bevorzugt, die letztere Version zu benutzen? danke – Bartzilla