请告诉我一个实时的情况来比较String,StringBuffer和StringBuilder?
在过去,我一直认为你应该使用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- 是+ =问题而不是+?)