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 接收,对此我无能为力。对象参数必须接受一个字符串。我怎样才能更快地做到这一点?使用字符串格式有帮助吗?
"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 会完成它的工作并尽可能快地执行代码。