Какую проблему решает StringBuilder в Java?

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

Ответ

StringBuilder решает проблему неэффективной конкатенации строк с помощью оператора + или метода String.concat().

Проблема: Объекты String в Java иммутабельны. Каждая операция конкатенации создает новый объект в куче, что приводит к:

  • Избыточному потреблению памяти.
  • Лишней нагрузке на сборщик мусора (GC).
  • Низкой производительности в циклах.

Решение: StringBuilder — это изменяемая (mutable) последовательность символов. Операции модификации (добавление, вставка, удаление) выполняются поверх внутреннего буфера, без создания новых объектов на каждое изменение.

Пример:

// Неэффективно (создается 4 строковых объекта)
String result = "";
for (int i = 0; i < 10; i++) {
    result += i; // Каждое присваивание создает новый String
}

// Эффективно (изменяется один объект StringBuilder)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
    sb.append(i); // Данные добавляются в буфер
}
String result = sb.toString(); // Создание строки происходит один раз

Ключевые моменты:

  • Не потокобезопасен (для многопоточности используйте StringBuffer).
  • Методы возвращают ссылку this, что позволяет использовать цепочки вызовов: sb.append("a").append("b").
  • Начальную емкость (capacity) можно задать в конструкторе для оптимизации, если известен примерный размер результата.