Встречается на собеседованиях • сегодня

Что такое пул строк

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

Как работает пул строк?

Когда в коде создается строка через строковый литерал (например, `String s = "Hello";`), JVM сначала проверяет пул строк. Если строка с таким же значением уже присутствует в пуле, то новый объект не создается. Вместо этого переменной `s` присваивается ссылка на уже существующий объект в пуле. Если же такой строки в пуле нет, JVM создает новый объект строки в пуле и возвращает ссылку на него.

Это поведение отличается от создания строк через оператор

`new` (например, `String s = new String("Hello");`). В этом случае в куче всегда создается новый объект `String`, независимо от того, содержится ли такая же строка в пуле строк или нет.

Примеры

java
String s1 = "Hello"; // Создается в пуле строк, если такой строки еще нет
String s2 = "Hello"; // Не создается новый объект, s2 ссылается на тот же объект, что и s1
String s3 = new String("Hello"); // Создается новый объект вне пула строк

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

Зачем он нужен?

Помогает оптимизировать использование памяти и повысить производительность приложений:

  • Экономия памяти: Поскольку строки, созданные как литералы, разделяются и хранятся в пуле, это сокращает общее количество создаваемых объектов `String`, экономя память.
  • Повышение скорости: Проверка наличия строки в пуле и повторное использование существующих строковых объектов может быть быстрее, чем создание новых объектов.

Как поместить строку в пул строк?

Можно использовать метод `intern()` класса `String`. Если строка, вызывающая метод `intern()`, еще не находится в пуле, то она добавляется туда, а затем возвращается ссылка на эту строку из пула. Если строка уже присутствует в пуле, то просто возвращается ссылка на уже существующую строку.

Пул строк — это механизм для оптимизации использования памяти и повышения производительности за счет повторного использования уникальных строковых литералов. Он позволяет избежать создания множественных копий одинаковых строковых объектов.

March 7, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы