Что такое пул строк (String Pool) в Java?

«Что такое пул строк (String Pool) в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Пул строк (String Pool) — это специальная область в heap-памяти Java, предназначенная для хранения уникальных строковых литералов. Его основная цель — оптимизация памяти за счёт переиспользования неизменяемых (immutable) строковых объектов.

Как работает: При создании строки через литерал (двойные кавычки) JVM сначала проверяет наличие идентичной строки в пуле. Если строка найдена — возвращается ссылка на существующий объект, иначе — создаётся новый объект и помещается в пул.

Пример:

String s1 = "hello"; // Создаётся в пуле
String s2 = "hello"; // Берётся из пула (s1 == s2 → true)
String s3 = new String("hello"); // Новый объект в heap (s1 == s3 → false)
String s4 = s3.intern(); // Явное помещение в пул (s1 == s4 → true)

Ключевые особенности:

  • Экономия памяти за счёт повторного использования строк-литералов.
  • Возможность благодаря иммутабельности строк (String immutable).
  • Метод intern() позволяет явно добавить строку в пул или получить ссылку на существующую.
  • Пул находится в heap и может быть очищен сборщиком мусора (в зависимости от версии JVM).