可能重复:
StringBuilder vs String concatenation in toString() in Java
我很想知道,因为编译器在执行字符串连接时内部使用StringBuilder来附加字符串,那么有什么意义呢?如果字符串连接已经为你完成了工作,我为什么要使用StringBuilder呢?还有其他具体原因吗?
答案 0 :(得分:61)
正如您所提到的,您不应该使用StringBuilder
而不是简单的字符串连接表达式,例如a + " = " + b
。后者输入速度更快,更易于阅读,编译器内部也会使用StringBuilder
,因此重写它没有性能优势。
但是,如果要在循环中连接大量字符串,则StringBuilder
非常有用。以下代码效率低下。它需要运行O(n 2 )时间并创建许多临时字符串。
String result = "";
for (int i = 0; i < foo.length; ++i)
{
result += bar(foo[i]); // Bad
}
请改为尝试:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < foo.length; ++i)
{
sb.append(bar(foo[i]));
}
String result = sb.toString();
编译器仅优化简单的a + b + c
表达式。它无法自动优化上述代码。
答案 1 :(得分:3)
你在哪里假设内部使用stringbuilder进行字符串连接?也许一个简单的concat被优化了,但这绝对不会:
String s = "";
for (int i = 0; i < 1000; i++){
for (int j = 0; j < 1000; j++){
s+= "" + i + j
}
}