Ответ
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 оптимизирует процесс сборки строк, минимизируя создание объектов.