Ответ
StringBuilder минимизирует создание объектов благодаря изменяемому внутреннему буферу (массиву char[]). В отличие от операции конкатенации строк (+), которая каждый раз создает новый неизменяемый объект String, StringBuilder модифицирует содержимое своего буфера.
Ключевой механизм:
- При создании
StringBuilderинициализируется с буфером определенной емкости. - Метод
append()добавляет данные в этот буфер. Если места не хватает, буфер расширяется (обычно по формуленовая_емкость = (старая_емкость * 2) + 2), что все равно происходит гораздо реже, чем создание новогоStringпри каждой конкатенации. - Финальная строка создается только при вызове
toString().
Сравнение на примере:
Неэффективно с + (в цикле):
String result = "";
for (int i = 0; i < 100; i++) {
result += i; // На КАЖДОЙ итерации создается новый String!
}
Эффективно с StringBuilder (в цикле):
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i); // Данные добавляются в существующий буфер
}
String result = sb.toString(); // Создается только один итоговый String
Вывод: StringBuilder следует использовать для многократной конкатенации строк, особенно в циклах, чтобы избежать накладных расходов на создание и сборку мусора от промежуточных объектов String.