Long.toString(i)与i + ""之间的区别

4

我们经常遇到这样的情况,需要传递一个基本类型的字符串表示,往往我们会使用

  WrapperClass.toString() ;

and sometimes we usually write

  i + "";

如果我们检查任何包装类的toString实现,每次调用它都会创建一个新的String对象。对于原始类型+""也是如此(因为在运行时连接将创建新的String对象)。
那么它们之间有什么区别,还是它们只是将原始类型转换为String对象的替代方法?
3个回答

7

就我个人而言,我喜欢使用String.valueOf(i)

  • 您可以将其与所有类型(甚至非原始类型)一起使用
  • 它是空安全的(假设您对将null值转换为“null”字符串值感到满意)
  • 它比"" + i表达您的意图更好 - 该代码表示字符串连接,这完全不是您想要的。

5

良好的意图。

i + "";,可能会让你的代码未来的维护者(很可能是你自己)需要弄清楚输出结果。

WrapperClass.toString(); 更加明确,虽然更冗长,但其意图更清晰。此外,弱类型 在 Java 中并不常见,因此建议您坚持编写惯用的 Java 代码。

编译后,生成的字节码很可能是相同或类似的。在 jitting 和运行时期间,您可以预期差异将被有效地抵消。

因此,最终,这是一个风格问题,尽管我建议您使用更冗长的版本。


性能不是有所差别吗?如果您查看WrapperClass.toString()的实现,它会执行许多处理,如创建char []并循环遍历它,而我认为原始类型+“”在幕后执行新字符串()? - dpsdce
@Dhirendra:这很不可能成为您的性能瓶颈。如果它确实是性能瓶颈,那么它可能会成为一个特定函数中使用的瓶颈(由分析器确定),您可以进行必要的调整,并进行仔细的文档说明原因。 - Brian

3

从功能上来说,它们是相同的。区别在于,i + "";基本上是利用副作用来实现其目的,这可能会使初学者更难理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接