Junior
85
questionbank
Для чего необходим String Pool в Java?
Ответ от нейросети
sobes.tech AI
String Pool в Java необходим для:
- Экономии памяти: Предотвращает создание дубликатов строковых литералов. Если строка с таким же значением уже существует в пуле, используется ссылка на нее.
- Оптимизации производительности: Сравнение строковых литералов (
==) становится быстрым, поскольку сравниваются ссылки, а не содержимое строк.
При создании строковых литералов (String s = "hello";) JVM сначала проверяет String Pool. Если "hello" уже есть, s ссылается на существующий объект. Если нет, создается новый объект "hello" в пуле, и s ссылается на него.
Использование конструктора new String("hello") всегда создает новый объект String в хипе, независимо от String Pool. Чтобы поместить его в пул, нужно вызвать метод intern().
// Пример работы String Pool
String s1 = "hello"; // Проверяет String Pool, создает при необходимости, ссылается на пул
String s2 = "hello"; // Проверяет String Pool, находит существующий, также ссылается на пул
System.out.println(s1 == s2); // true - ссылки одинаковые
String s3 = new String("hello"); // Создает новый объект в хипе
System.out.println(s1 == s3); // false - ссылки разные
String s4 = s3.intern(); // Проверяет String Pool для содержимого s3.
// Поскольку "hello" уже есть в пуле (из s1/s2),
// s4 ссылается на объект в пуле.
System.out.println(s1 == s4); // true - s1 и s4 ссылаются на один объект в пуле