Long.toString(i)vs i +“”之间的区别

时间:2011-10-11 05:10:28

标签: java string

我们经常遇到一个场景,我们需要传递一个原语的String表示,然后我们不经常使用

  WrapperClass.toString() ;

有时我们通常写

  i + "";

如果我们检查任何包装器类的toString实现,它每次调用它时都会创建一个新的String对象。对于原语+“”也是如此(因为运行时的连接将创建新的String对象)

它们之间是否有任何区别,或者它们只是将基元转换为String对象的替代方法;

3 个答案:

答案 0 :(得分:7)

我个人喜欢String.valueOf(i)

  • 您可以将它用于所有类型(甚至非基元)
  • 它是null安全的(假设您在转换null值时对字符串值“null”感到满意)
  • 它表达了你的意图远远超过"" + i - 该代码表示​​字符串连接,这根本不是你所追求的。

答案 1 :(得分:5)

善意。

i + "";,你可能会把它留给代码的未来维护者(很可能就是你)来弄清楚输出是什么。

WrapperClass.toString();更明确,虽然更详细,但其意图更清晰。此外,weak typing不是您通常在Java中看到的,所以我建议您坚持编写惯用的Java代码。

编译后,发出的字节码很可能是相同或相似的。在jitting之后和运行期间,您可以预期差异将被有效地消除。

所以,最后,这是一个风格问题,虽然我建议使用更详细的代码版本。

答案 2 :(得分:3)

从功能上讲,它们是相同的。不同的是,i + "";基本上使用副作用来归档其目的,这可能使初学者更难理解。