Неизменность строк имеет мало общего с постоянным пулом строк. Или, скорее, они имеют , чтобы быть неизменными, чтобы пул строк был полезным, но для того, чтобы они были неизменяемыми, необязательно должен быть пул строк.
Обратите внимание, что в пул строк обычно попадают только константы времени компиляции - если только вы не вызовете intern()
. Так, например, если у вас есть:
char[] x = { 'a', 'b', 'c' };
String s1 = new String(x);
String s2 = new String(x);
затем s1
и s2
относятся к одинаковым строкам, но отдельным объектам.
Создание двух StringBuilder
объектов просто создает два объекта. Точные подробности реализации того, что находится внутри StringBuilder
, могут легко меняться между версиями, и я не знаю подробностей, но это может быть просто char[]
, созданный из строки, переданной в конструктор. (Во всяком случае, я считаю, что это касается JDK 1.6.)