Назад к вопросам
Junior
90
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Пул строк — это особая область в куче (Heap), где JVM (Java Virtual Machine) хранит строковые литералы (String literals).

Когда создается строковый литерал, JVM сначала проверяет пул строк на наличие идентичной строки.

  • Если строка найдена, возвращается ссылка на существующий объект из пула.
  • Если строка не найдена, создается новый объект String внутри пула строк, и возвращается ссылка на него.

Это оптимизация для экономии памяти, так как множество строковых литералов с одинаковым содержимым могут использовать один и тот же объект String в пуле.

Пример:

// Создает строковый литерал, "hello" добавляется в пул строк (если еще нет)
String s1 = "hello";

// Создает строковый литерал, "hello" уже есть в пуле, возвращается ссылка на существующий объект
String s2 = "hello";

// s1 и s2 ссылаются на один и тот же объект в пуле строк
System.out.println(s1 == s2); // true

// Создает новый объект String в куче за пределами пула строк
String s3 = new String("hello");

// s1 и s3 ссылаются на разные объекты
System.out.println(s1 == s3); // false

// Метод intern() "интернирует" строку, добавляя ее в пул строк
// Если "hello" уже есть в пуле, возвращается ссылка на объект из пула
String s4 = s3.intern();

// s1 и s4 ссылаются на один и тот же объект в пуле строк
System.out.println(s1 == s4); // true

String pool управляется JVM и является частью поколения Young Generation. Он повышает производительность за счет уменьшения количества создаваемых объектов String.