[英]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()
这是...一种工作方法。
但是, StringBuilder
有append(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.