Какую цель преследует String Pool в Java?

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

Ответ

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

Как это работает:

  1. При создании строки через литерал (например, String s = "hello";) JVM проверяет наличие этой строки в пуле.
  2. Если строка найдена, возвращается ссылка на существующий объект.
  3. Если не найдена — строка создается в пуле, и ссылка на нее возвращается.

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

String a = "hello"; // Создается в String Pool
String b = "hello"; // Найдена в пуле, возвращается ссылка на тот же объект
String c = new String("hello"); // Принудительно создается новый объект в куче вне пула

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

Ключевые моменты:

  • Метод intern() позволяет поместить строку, созданную через new, в пул или получить ссылку на уже существующую там строку: c = c.intern(); (после этого a == c вернет true).
  • Пул применим только к строковым литералам и интернированным строкам, строки, сформированные во время выполнения (например, через конкатенацию), по умолчанию в него не попадают.
  • Основная выгода — значительная экономия памяти при частом использовании одинаковых строковых констант в программе.