Junior — Middle
Biztosak lehetünk abban, hogy az adott sztring mindig a String Pool-ból származó objektumra fog hivatkozni az értékadáskor?
sobes.tech MI
Válasz az MI-től
Нет, не всегда. В Java строковые литералы, объявленные в коде, автоматически помещаются в String Pool — специальное хранилище для уникальных строк. При присваивании строкового литерала переменной ссылка указывает на объект из пула.
Однако если строка создаётся динамически, например, с помощью оператора new String("...") или путём конкатенации, то она не обязательно будет ссылаться на объект из String Pool, а создаст новый объект в куче.
Чтобы явно поместить строку в пул, можно вызвать метод intern():
String s1 = new String("hello");
String s2 = s1.intern(); // s2 ссылается на строку из пула
Таким образом, только строковые литералы и строки, явно интернированные через intern(), гарантированно ссылаются на объекты из String Pool.