差别不大。使用较短且更有效的方法。
如果您确实出于其他原因想要获取对象的字符串值,并且希望它对 null 友好,请执行以下操作:
String s = String.valueOf(obj);
Edit: 问题被扩展了,所以我会扩展我的答案。
在这两种情况下,它们都会编译为如下所示:
System.out.println(new StringBuilder().append("obj: ").append(obj).toString());
当你的toString()
是隐式的,您将在第二个附录中看到这一点。
如果你查看java的源代码,你会发现StringBuilder.append(Object)
看起来像这样:
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
where String.valueOf
看起来像这样:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
现在,如果你toString()
你自己,你绕过空检查和堆栈帧并直接进入这个StringBuilder
:
public StringBuilder append(String str) {
super.append(str);
return this;
}
所以......这两种情况都会发生非常相似的事情。一个人只需多做一点工作即可。