Как следует из названия, String Pool в java – это пул строк, хранящихся в Памяти кучи Java. Мы знаем, что String – это особый класс в Java, и мы можем создавать объекты String, используя оператор new, а также указывая значения в двойных кавычках.
String Pool в Java
Вот диаграмма, которая четко объясняет, как поддерживается String Pool в пространстве кучи Java, и что происходит, когда мы используем разные способы создания строк. Строка Pool возможна только потому, что String неизменяем в Java, и его реализация концепции String interning. String pool также является примером шаблона проектирования Flyweight. Строка Pool помогает экономить много места для Java Runtime, хотя на создание строки требуется больше времени. Когда мы используем двойные кавычки для создания строки, сначала происходит поиск строки с тем же значением в String pool, если она найдена, просто возвращается ссылка, в противном случае создается новая строка в pool, а затем возвращается ссылка. Однако при использовании оператора new мы заставляем класс String создать новый объект String в пространстве кучи. Мы можем использовать метод intern() чтобы поместить его в pool или ссылаться на другой объект String из string pool, имеющий то же значение. Вот программа на языке Java для изображения String Pool:
package com.journaldev.util;
public class StringPool {
/**
* Java String Pool example
* @param args
*/
public static void main(String[] args) {
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.println("s1 == s2 :"+(s1==s2));
System.out.println("s1 == s3 :"+(s1==s3));
}
}
Вывод вышеуказанной программы:
s1 == s2 :true
s1 == s3 :false
Рекомендуемое чтение: Java String Class
Сколько строк создается в пуле строк?
Иногда на собеседовании по Java вас могут спросить о пуле строк. Например, сколько строк создается в следующем выражении;
String str = new String("Cat");
В приведенном выше выражении будет создано либо 1, либо 2 строки. Если в пуле уже существует строковый литерал “Cat”, то будет создана только одна строка “str” в пуле. Если строкового литерала “Cat” в пуле нет, то он будет создан сначала в пуле, а затем в куче, таким образом, будет создано в общей сложности 2 строки. Читать: Вопросы на собеседовании по Java String
Source:
https://www.digitalocean.com/community/tutorials/what-is-java-string-pool