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

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

Ответ

String Pool (пул строк) — это специальная область в Heap Memory (куче), предназначенная для хранения уникальных литералов строковых объектов. Это механизм оптимизации памяти, реализованный JVM.

Принцип работы:

  • При создании строки через литерал (String s = "text") JVM ищет строку с таким значением в пуле.
  • Если строка найдена, возвращается ссылка на существующий объект.
  • Если не найдена — строка создаётся в пуле, и ссылка на неё возвращается.
  • Строки, созданные через оператор new, всегда размещаются в обычной куче, даже если их значение уже есть в пуле.

Пример, демонстрирующий разницу:

String literal1 = "Java"; // Помещается в String Pool
String literal2 = "Java"; // Берётся ссылка из пула
String newString = new String("Java"); // Создаётся новый объект в куче

System.out.println(literal1 == literal2); // true (одна и та же ссылка)
System.out.println(literal1 == newString); // false (разные объекты в памяти)
System.out.println(literal1.equals(newString)); // true (значения равны)

// Метод intern() добавляет строку в пул (если её там нет) и возвращает ссылку из пула
String internedString = newString.intern();
System.out.println(literal1 == internedString); // true

Практическое значение:

  • Экономия памяти: Многократное использование одних и тех же строковых литералов.
  • Ускорение сравнения: Быстрая проверка через == для строк из пула (хотя для общего случая всегда следует использовать .equals()).