Подтвердить что ты не робот

Зачем использовать StringBuilder явно, если компилятор автоматически преобразует конкатенацию строк в StringBuilder?

Возможный дубликат:
StringBuilder vs Конкатенация строк в toString() в Java

Мне интересно, так как компилятор внутренне использует StringBuilder для добавления 2 строк при выполнении конкатенации String, то в чем смысл и почему я должен беспокоиться об использовании StringBuilder, если конкатенация String уже выполнила эту работу для вас? Существуют ли другие конкретные причины?

4b9b3361

Ответ 1

Как вы упомянули, вы не должны использовать 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. Он не может автоматически оптимизировать вышеуказанный код.

Ответ 2

Где вы предполагаете, что в строковом конкатенировании используется встроенный buildbuilder? Может быть, простой concat оптимизирован, но это определенно не будет:

String s = "";

for (int i = 0; i < 1000; i++){
  for (int j = 0; j < 1000; j++){
    s+= "" + i + j
}
}