java:字节码中的字符串concat转换为StringBuilder

Ham*_*ani 4 java string stringbuilder jvm javap

我用javac命令行查看了我的编译代码,每当我使用String运算符+运算符时,我就会看到,编译后的代码被StringBuilder的append()方法替换.现在我认为使用StringBuilder和String连接具有相同的性能,因为它们具有相似的字节码,是否正确?

Ser*_*kov 13

是的,这是真的!但是当你在循环中连接时,行为会有所不同.例如

String str = "Some string";
for (int i = 0; i < 10; i++) {
  str += i;
}
Run Code Online (Sandbox Code Playgroud)

new StringBuilder将在每个循环迭代中构造(具有str的初始值),并且在每次迭代结束时将与初始String(实际上StringBuilder具有初始值str)串联.
因此,只有在循环中使用字符串连接时,才需要自己创建StringBuilder.