Sobes.tech
Junior
106
questionbank

Что такое пул строк в Java?

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

sobes.tech AI

Пул строк (String Pool) — это область в хипе (Heap) JVM, где хранятся строковые литералы. Когда JVM встречает строковый литерал, она сначала проверяет этот пул. Если строка уже существует, возвращается ссылка на существующий объект. Если нет, создается новый строковый объект в пуле и возвращается ссылка на него.

Преимущества:

  • Экономия памяти: Несколько ссылок могут указывать на один и тот же строковый объект в пуле.
  • Производительность: Сравнение ссылок (==) на строки из пула быстрее, чем сравнение содержимого строк (equals()).

Пример:

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

// Возвращает ссылку на тот же объект "hello" из пула
String s2 = "hello";

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

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

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

// Содержимое строк одинаково
System.out.println(s1.equals(s3)); // Выведет true

Метод intern() можно использовать для явного добавления строки, созданной с помощью new String(), в пул или получения ссылки на существующую строку из пула с таким же содержимым.

// Создает новый объект строки "world" в хипе
String s4 = new String("world");

// Добавляет "world" в пул (если его там нет) и возвращает ссылку
String s5 = s4.intern();

// Создает строку в пуле (ссылка на тот же объект, на который теперь указывает s5)
String s6 = "world";

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