Java 9 整数转换为字符串

Java 9 integer to String cast

我刚读到 Java 9 功能 https://bugs.openjdk.java.net/browse/JDK-8085796 说 'slow' 使用 StringBuilder 的字符串连接将得到改进。

所以我的问题是,按以下方式将 int 转换为 String 是否还有任何缺点?

int i = 16;
String s = ""+i;

或者是否有使用 Integer.toString(i)String.valueOf(i) 将 int 转换为 String 的任何 pros/cons?

编辑:由于我的问题过于基于个人意见(抱歉),我更改了它。我对不同铸件的正面或负面感兴趣。每个人都应该自己决定使用哪一个。

首先,Integer.toString(i)总是比""+i快的假设是不成立的。

最值得注意的是,如果 i 是一个编译时间常量,那么 ""+i 也是,与 String.valueOf(i) 相反。当然,如果定义为final int i=16;,读者会反对使用""+i,因为"16"会更清楚。但是如果我们谈论 final int DEFAULT_USER = DEFAULT_GROUP << GROUP_BIT;""+DEFAULT_USER 比包含实际数字的文字字符串要清楚得多。作为编译时常量不仅仅是一个性能问题,它允许在注释或 switch 语句的 case 标签中使用字符串。

如果i不是编译时常量,则不存在强制编译形式,所以原则上允许编译器将""+i编译为Integer.toString(i)。如果我们将通常的朴素(或者我们称之为“直接”)实现 new StringBuilder().append("").append(i).toString()Integer.toString(i) 变体或假设的优化 Java 9 实现进行比较,只有最终的复制操作来自StringBuilder 对结果 String 的值数组的缓冲区可能会对性能产生影响,但这可以通过 HotSpot JVM 进行优化。 Java 9 解决方案针对的另一个问题是 StringBuilder 的初始容量,与此无关,因为 int 的字符串表示很容易适合默认容量16 chars.

对于大多数重要的 int 值,转换为小数形式的成本将大大超过其他成本,因此如果您更喜欢 ""+i 而不是 Integer.toString(i),则不应让性能问题是不使用它的原因。这也意味着您不应该期望 Java 9 实现有显着的加速。主要操作还是一样

我认为,Java 9 解决方案的最大改进是代码大小的减少,因为所有这些类似的调用序列,都是为每个字符串连接生成的表达式,将被折叠到一个指令(这与多个表达式的连接特别相关)。提高性能的机会只是一个不错的附加组件,但我不希望这些改进会很显着,尤其是在 JRE 9 的第一个版本中。

所以""+iInteger.toString(i)String.valueOf(i)之间的决定只是一个风格问题(我们不在这里讨论),而不是性能问题。