В каких случаях в Java следует использовать StringBuilder вместо конкатенации строк?

«В каких случаях в Java следует использовать StringBuilder вместо конкатенации строк?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

StringBuilder следует использовать при многократной модификации строки в цикле или методе (например, построение SQL-запроса, XML/JSON). Это предотвращает создание множества промежуточных неизменяемых (immutable) объектов String и повышает производительность.

Почему это важно:

  • Класс String immutable. Операция 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.