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