繁体   English   中英

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

[英]Fastest way to concatenate an integer into a string

我有一个 object 在初始化时它需要一个字符串来识别它的名字。

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

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

"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”字面量将被保留,然后只是重用,每次分配“name”时,无论如何都会创建一个新字符串,所以我真的不知道如何让它运行得更快。 (也许将 objectNum 存储在 object 而不是名称中,然后仅在您想打印整个标识符时才进行连接?我想您这样可以节省几飞秒...)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM