Ответ
String Pool (пул строк) — это специальная область в heap memory (куче) JVM, предназначенная для оптимизации памяти и повышения производительности за счет хранения уникальных строковых литералов.
Как это работает:
- При создании строки через литерал (например,
String s = "hello";) JVM проверяет наличие этой строки в пуле. - Если строка найдена, возвращается ссылка на существующий объект.
- Если не найдена — строка создается в пуле, и ссылка на нее возвращается.
Пример, демонстрирующий механизм:
String a = "hello"; // Создается в String Pool
String b = "hello"; // Найдена в пуле, возвращается ссылка на тот же объект
String c = new String("hello"); // Принудительно создается новый объект в куче вне пула
System.out.println(a == b); // true: ссылки идентичны
System.out.println(a == c); // false: разные объекты в памяти
System.out.println(a.equals(c)); // true: содержимое строк одинаково
Ключевые моменты:
- Метод
intern()позволяет поместить строку, созданную черезnew, в пул или получить ссылку на уже существующую там строку:c = c.intern();(после этогоa == cвернетtrue). - Пул применим только к строковым литералам и интернированным строкам, строки, сформированные во время выполнения (например, через конкатенацию), по умолчанию в него не попадают.
- Основная выгода — значительная экономия памяти при частом использовании одинаковых строковых констант в программе.