Назад к вопросам
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().