Ответ
StringBuilder следует использовать при многократной модификации строки в цикле или методе (например, построение SQL-запроса, XML/JSON). Это предотвращает создание множества промежуточных неизменяемых (immutable) объектов String и повышает производительность.
Почему это важно:
- Класс
Stringimmutable. Операцияstr1 + str2создает новый объект в куче, копируя содержимое. - В цикле это приводит к квадратичной сложности O(n²) по времени и памяти.
StringBuilderиспользует изменяемый внутренний буфер (массив char), что дает линейную сложность O(n).
Пример сравнения:
// НЕЭФФЕКТИВНО: создается много объектов String
String result = "";
for (String item : list) {
result += item; // Новый String на каждой итерации
}
// ЭФФЕКТИВНО: один объект StringBuilder
StringBuilder sb = new StringBuilder();
for (String item : list) {
sb.append(item);
}
String result = sb.toString();
Исключения (когда StringBuilder не нужен):
- Простая конкатенация нескольких литералов:
"Hello, " + name. Компилятор оптимизирует это сам. - Если требуется потокобезопасность — используйте
StringBuffer.
Best Practice: При конкатенации более чем 3-4 строк в цикле всегда выбирайте StringBuilder.