Почему StringBuilder не помещает строки в String Pool?

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

Ответ

StringBuilder работает с изменяемым (mutable) внутренним массивом символов (char[]), напрямую модифицируя его содержимое. Он не создает неизменяемые (immutable) объекты String, которые являются кандидатами для помещения в String Pool.

Ключевые отличия:

  • String: Immutable. При конкатенации ("a" + "b") создается новый объект String. Литералы и интернированные строки попадают в String Pool для повторного использования.
  • StringBuilder: Mutable. Операции вроде .append() изменяют существующий буфер, не порождая промежуточных строковых объектов.

Пример:

StringBuilder sb = new StringBuilder("Hello");
sb.append(" ");
sb.append("World"); // Все операции выполняются в одном массиве char[]
String result = sb.toString(); // Только здесь создается новый String

Итог: StringPool оптимизирует хранение неизменяемых строк, а StringBuilder оптимизирует процесс сборки строк, минимизируя создание объектов.