Объекты класса String попадают в String Pool двумя основными способами:
Использование строкового литерала:
Когда вы создаете строку с помощью литерала (например, "привет"), виртуальная машина Java (JVM) сначала проверяет String Pool. Если строка с таким же содержимым уже существует, возвращается ссылка на нее. В противном случае, новая строка создается в String Pool, и возвращается ссылка на новый объект.
java
Вызов метода intern():
Метод intern() вызывается у объекта String и возвращает каноническое представление строки. Если строка с таким же содержимым уже есть в String Pool, возвращается ссылка на нее. Если нет, строка добавляется в String Pool, и возвращается ссылка на добавленный объект.
java
Таким образом, String Pool служит для кеширования часто используемых строковых литералов, оптимизируя использование памяти, поскольку разные ссылки могут указывать на один и тот же объект строки в пуле. Строки, созданные через new String(...), изначально не помещаются в пул, пока не будет явно вызван метод intern().