Назад к вопросам
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.