Sobes.tech
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 ссылаются на один объект в пуле