Ответ
Объекты String в Java (и, соответственно, Android) хранятся в String Pool (пуле строк), который находится в Heap (куче).
- String Pool — это специальная область Heap, где JVM хранит уникальные строковые литералы для оптимизации памяти.
- При создании строки через литерал (
String s = "hello"), JVM сначала ищет её в пуле. Если находит — возвращает ссылку, иначе — добавляет. - При создании через
new String("hello")объект создаётся в куче вне пула (но можно добавить вручную черезintern()).
String s1 = "hello"; // В пуле
String s2 = new String("hello"); // В куче, вне пула
String s3 = s2.intern(); // Добавлено в пул (если не было)
Важно: Начиная с Java 7, String Pool перемещён в Heap (раньше был в PermGen).