在Java中将常量字符串附加到变量字符串的最有效方法?

0 java string loops concatenation

目前在我的代码中,我在for循环中有类似于:

bstr = bstr + x.charAt(i) + x.charAt(i>>4) + x.charAt(i>>8);
Run Code Online (Sandbox Code Playgroud)

其中i是整数,循环变量和x是静态最终常量字符串.bstr可以是KB的顺序.

谢谢

Joh*_*sen 5

一种高效的方法是使用StringBuilder来连接你的字符串:

StringBuilder builder = new StringBuilder();
for(int i = 0; i < count; i++){
    builder.append(x.charAt(i));
    builder.append(x.charAt(i>>4));
    builder.append(x.charAt(i>>8));
}

return builder.toString();
Run Code Online (Sandbox Code Playgroud)

这种技术避免了在for循环中在串联之间存储字符串的所有副本的问题.

编辑:

或者这对你有效(一次不添加一个字符):

StringBuilder builder = new StringBuilder();
for(int i = 0; i < count; i++){
    builder.append(x);
}

return builder.toString();
Run Code Online (Sandbox Code Playgroud)

  • 你对"连接的所有组合"有什么看法?诸如`a + b + c`之类的表达式被编译为`new StringBuilder().append(a).append(b).append(c).toString()` (3认同)
  • 如问题所述,JVM不会在for循环中转换连接. (2认同)
  • 所以,是的,for循环的内容将被正确连接,但是在迭代中,连接仍将存储每个迭代副本. (2认同)