Ответ
Строки в Java хранятся в куче (Heap). Для эффективного использования памяти JVM применяет механизм String Pool (пул строк).
Как это работает:
- При создании строки через литерал (
String s = "text") JVM ищет идентичную строку в пуле. - Если строка найдена, возвращается ссылка на существующий объект.
- Если не найдена, создается новый объект в куче и помещается в пул.
Пример, демонстрирующий разницу:
String literal1 = "hello"; // Помещается в String Pool
String literal2 = "hello"; // Возвращается ссылка из пула (literal1 == literal2 -> true)
String newString = new String("hello"); // Создается новый объект в куче вне пула
// newString == literal1 -> false
String interned = newString.intern(); // Помещаем строку в пул вручную
// interned == literal1 -> true
Ключевые особенности:
- String Pool расположен в Heap (начиная с Java 7).
- Пул хранит только уникальные литералы и строки, к которым применен метод
intern(). - Это оптимизация для экономии памяти и повышения производительности.