Для чего в Java используется StringBuilder и в чём его преимущества перед конкатенацией строк?

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

Ответ

StringBuilder — это изменяемый (mutable) класс для эффективного построения и модификации строк, особенно при множественных операциях.

Ключевое преимущество — производительность. Конкатенация строк через + или String.concat() создаёт новые неизменяемые объекты String в куче, что приводит к лишним аллокациям памяти и сборке мусора. StringBuilder работает с изменяемым внутренним массивом символов (char[]).

Сравнение на примере цикла:

// НЕЭФФЕКТИВНО: Создаётся много промежуточных строк
String result = "";
for (int i = 0; i < 1000; i++) {
    result += i; // Каждый раз создаётся новый String!
}

// ЭФФЕКТИВНО: Изменяется один объект StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i);
}
String result = sb.toString();

Основные методы:

  • append() – добавление в конец.
  • insert() – вставка в позицию.
  • delete(), replace() – удаление и замена.
  • reverse() – реверс строки.

Когда использовать:

  • Динамическое построение строк в циклах.
  • Формирование сложных SQL-запросов или JSON/XML.
  • Многократные модификации одной строки.

Важно: StringBuilder не потокобезопасен. Для многопоточных сценариев используйте StringBuffer (синхронизированный, но медленнее).