我想知道,由于编译器在执行字符串连接时在内部使用 StringBuilder 来附加字符串,那么如果字符串连接已经为您完成了这项工作,那么有什么意义,为什么我还要使用 StringBuilder 呢?还有其他具体原因吗?
问问题
18535 次
2 回答
69
正如您所提到的,您不应该使用StringBuilder
简单的字符串连接表达式来代替,例如a + " = " + b
. 后者打字速度更快,更容易阅读,而且编译器StringBuilder
无论如何都会在内部使用 a ,因此重写它并没有性能优势。
但是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
表达式。它无法自动优化上述代码。
于 2012-08-13T21:11:50.013 回答
3
您在哪里假设字符串连接在内部使用 stringbuilder ?也许一个简单的 concat 会被优化掉,但这绝对不会:
String s = "";
for (int i = 0; i < 1000; i++){
for (int j = 0; j < 1000; j++){
s+= "" + i + j
}
}
于 2012-08-13T21:12:34.263 回答