在过去,我一直认为你应该使用StringBuilder和append(String)构建带变量的字符串,而不是string += split[i].在什么情况下这是准确的?我问,因为通常,如果我要写下面的内容:
String[] split = args; // command line arguments or whatever
String myString = "";
for (int i = 0; i < split.length; i++) {
myString += split[i];
}
Run Code Online (Sandbox Code Playgroud)
我的IDE告诉我它应该转换为使用StringBuilder.但是,写这样的东西:
StringBuilder build = new StringBuilder();
build.append("the ").append(build.toString()).append(" is bad").append(randomvar);
build.toString();
Run Code Online (Sandbox Code Playgroud)
当我应该使用String时,IntelliJ实际上使用StringBuilder列为性能问题.它被列为性能问题的事实表明它实际上可能导致问题,而不是仅仅是一点点慢.
我注意到第一个例子是一个循环,第二个例子不是 - 是一个建议用于大量连接的StringBuilder,但是正常连接对于非循环情况更好(这也意味着在循环中运算符+=将被使用,而在外部它可能是一个循环"the " + build.toString() + " is bad" + randomVar- 是+ =问题而不是+?)
字符串连接在后台转换为对StringBuilder.append()的调用.
字符串文字串联(或至少可以)转换为单个字符串文字.
你可能在循环中使用了一个String变量(不仅仅是两个文字),所以Java不能用文字替换它; 它必须使用StringBuilder.这就是为什么在循环中进行String连接应该使用单个StringBuilder完成的原因,否则每次循环迭代时Java最终会创建另一个StringBuilder实例.
另一方面,这样的事情:
String animals = "cats " + "dogs " + "lizards ";
Run Code Online (Sandbox Code Playgroud)
将(或可以)用单个字符串文字替换(由Java,而不是您),因此使用StringBuilder实际上会适得其反.
| 归档时间: |
|
| 查看次数: |
2949 次 |
| 最近记录: |