将整数连接成字符串的最快方法

Muh*_*far 0 java string type-conversion

我有一个对象,它在初始化时需要一个字符串来标识它的名称。

String name = "MyObject" + Integer.toString(objectNum);
object = new Object(name);
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,名称遵循一个约定,即整数与字符串“MyObject”连接在一起。一位同事抱怨说,由于 int 到 string 的转换,我编写这段代码的方式从性能角度来看实际上很糟糕。该数字作为 int 接收,对此我无能为力。对象参数必须接受一个字符串。我怎样才能更快地做到这一点?使用字符串格式有帮助吗?

And*_*ner 5

"MyObject" + objectNum
Run Code Online (Sandbox Code Playgroud)

是最好的。objectNum自动有效地转换为String.

专注于可读性,让 Java 担心连接它的最佳方式。


的性能问题"MyObject" + Integer.toString(objectNum)在于它显式地String从 中创建int,然后将其连接到前面的String。它往往被编译成类似的东西:

new StringBuilder("MyObject").append(Integer.toString(objectNum)).toString()
Run Code Online (Sandbox Code Playgroud)

这是...一种工作方法。

但是,StringBuilderhas append(int),如果它知道参数是 an ,它能够更有效地做事int"MyObject" + objectNum仍然变成这样:

new StringBuilder("MyObject").append(objectNum).toString()
Run Code Online (Sandbox Code Playgroud)

这只是避免创建Stringfor objectNum


尽管如此,JIT 可以很好地识别该"MyObject" + Integer.toString(objectNum)模式,并像这样有效地执行它"MyObject" + objectNum(反之亦然,ofc,如果它确定它更有效),因此可能没有实际的性能差异。

鉴于此,您应该使用更易于阅读的表单,并且只相信 JIT 会完成它的工作并尽可能快地执行代码。