为什么 String.valueOf 比将整数转换为字符串的字符串连接更快?
Why is String.valueOf faster than String Concatenation for converting an Integer to a String?
这是问题 . It is not a duplicate. Rather, it stems from this answer 的反面,基准断言 t.setText(String.valueOf(number))
比 t.setText(""+number)
快,而 ChristianB 的问题是 为什么 即
字符串添加导致编译器创建一个 StringBuilder
实例,然后对每个添加的元素进行追加调用,然后调用 StringBuilder.toString()
以创建结果串联的 String
实例.
因此,""+number
创建一个 StringBuilder
,使用与 String.valueOf
相同的转换附加一个数字,然后从 StringBuilder
创建一个 String
实例] 与 StringBuilder.toString
.
String.valueOf(number)
避免使用 StringBuilder,仅使用 String.valueOf
.
中的值
当编译器可以避免所有这些情况时,如果它可以识别最终的 String 结果,因为附加的元素都是常量,那么答案可能会有所不同。在那种情况下,编译器只是将最终的字符串放入编译后的代码中。
这是问题 t.setText(String.valueOf(number))
比 t.setText(""+number)
快,而 ChristianB 的问题是 为什么 即
字符串添加导致编译器创建一个 StringBuilder
实例,然后对每个添加的元素进行追加调用,然后调用 StringBuilder.toString()
以创建结果串联的 String
实例.
因此,""+number
创建一个 StringBuilder
,使用与 String.valueOf
相同的转换附加一个数字,然后从 StringBuilder
创建一个 String
实例] 与 StringBuilder.toString
.
String.valueOf(number)
避免使用 StringBuilder,仅使用 String.valueOf
.
当编译器可以避免所有这些情况时,如果它可以识别最终的 String 结果,因为附加的元素都是常量,那么答案可能会有所不同。在那种情况下,编译器只是将最终的字符串放入编译后的代码中。