0

这两个代码有什么区别:(对象是任意随机对象)

Object object = anything;
String str = object+"";

Object object = anything;
String str = object.toString();

他们都返回相同的String

他们表现如何?哪一个更好?

4

2 回答 2

4

如果您使用反编译这些示例,javap -c您将在第一种情况下看到

  • StringBuilder将被创建
  • 它会append(Object obj)
  • 内部将调用append(String.valueOf(obj));
  • 首先将检查null参考。

所以结果的主要区别null

Object o = null;
System.out.println(o + ""); // result "null"
System.out.println(o.toString()); // throws NPE

如果您的数据不能null或您想抛出 NPE,您应该使用toString()以获得更好的性能。

如果您的数据可以null并且在这种情况下结果字符串也应该"null" String.valueOf(object)为您提供比object+"".

于 2013-09-21T14:50:20.830 回答
2

第一个相当于:

Object object = anything;
String str = new StringBuilder().append(object).toString();

而第二个只是一个普通的toString()电话。性能差异可能可以忽略不计,但几乎可以肯定第二个会稍微快一些,因为它不使用不必要的StringBuilder. 一般来说,更喜欢第二种方法。

于 2013-09-21T14:43:48.030 回答