为什么 String.valueOf 比 String Concatenation 更快地将整数转换为字符串?

问题描述

这是问题 "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 放入编译后的代码中。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...