问题描述
这是问题 "Why is String concatenation faster than String.valueOf for converting an Integer to a String?" 的反面。它不是重复。相反,它源于 this answer 与基准断言 t.setText(String.valueOf(number))
比 t.setText(""+number)
快,以及 ChristianB 关于为什么的问题。
解决方法
字符串相加导致编译器创建一个 StringBuilder
实例,然后对每个添加的元素进行 append 调用,然后调用 StringBuilder.toString()
以创建结果连接的 String
实例。
因此,""+number
创建一个 StringBuilder
,使用与 String.valueOf
相同的转换附加一个数字,然后从 String
创建一个 StringBuilder
实例, StringBuilder.toString
。
String.valueOf(number)
避免使用 StringBuilder,仅使用来自 String.valueOf
的值。
当编译器可以避免所有这些时,如果它能够识别最终的 String 结果,那么答案可能会有所不同,因为附加的元素都是常量。在这种情况下,编译器只是将最终的 String 放入编译后的代码中。