Sobes.tech
Назад к вопросам
Junior — Middle
65

Будет ли сохраняться объединённая строка 'ABCDABC' в пул строк после её создания путём конкатенации?

Ответ от нейросети

sobes.tech AI

В Java строковые литералы хранятся в пуле строк (String Pool), что позволяет переиспользовать одинаковые строки и экономить память. Однако, когда строка создаётся путём конкатенации во время выполнения (например, с помощью оператора + с переменными), новая строка не автоматически помещается в пул.

Чтобы явно добавить строку в пул, нужно вызвать метод intern():

String s1 = "ABCD" + "ABC"; // конкатенация литералов во время компиляции, результат "ABCDABC" уже в пуле

String part1 = "ABCD";
String part2 = "ABC";
String s2 = part1 + part2; // создаётся новая строка в куче, не в пуле

String s3 = s2.intern(); // теперь s3 ссылается на строку из пула

Если конкатенация происходит из литералов, компилятор объединит их на этапе компиляции, и строка окажется в пуле. Если же конкатенация происходит во время выполнения, строка не попадёт в пул, пока явно не вызвать intern().