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

Fastest way to concatenate an integer into a string

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

String name = "MyObject" + Integer.toString(objectNum);
object = new Object(name);

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

"MyObject" + objectNum

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

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


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

new StringBuilder("MyObject").append(Integer.toString(objectNum)).toString()

这是...一种可行的方法。

但是,StringBuilderappend(int),如果它知道参数是 int,它可以更有效地做事。 "MyObject" + objectNum 仍然变成这样:

new StringBuilder("MyObject").append(objectNum).toString()

这只是避免为 objectNum.

创建 String

综上所述,JIT 可以很好地识别 "MyObject" + Integer.toString(objectNum) 模式,并像 "MyObject" + objectNum 一样有效地执行它(反之亦然,ofc,如果它确定效率更高),所以可能没有实际性能差异。

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

从性能的角度来看,我认为您的代码很好。 “MyObject”字面量将被保留,然后重新使用,每次您分配“名称”时,您都会创建一个新字符串,所以我真的不知道如何才能更快地 运行 。 (也许将 objectNum 存储在对象中而不是名称中,然后仅在你想打印整个标识符时才连接?我想你会这样节省几飞秒...)

就我个人而言,我会使用这种方法(主要是为了可读性,而且它在执行方面并不是最快的): 字符串名称 = String.format("MyObject%d", objectNum);