Все они хранятся в куче, но intern()
строки ed (включая строковые литералы в источнике) имеют ссылку из пула в классе String
.
Если они отображаются в виде литералов в исходном коде, включая константные строковые выражения (например, "a" + "b"
), то на них также будут ссылаться из Class
, в котором они появляются, что обычно означает, что они будут работать до тех пор, пока выполняется процесс .
Редактировать :
Когда вы вызываете intern()
для строки в вашем коде, она также добавляется в этот пул, но поскольку она использует слабые ссылки, строка может все еще подвергаться сборке мусора, если она больше не используется.
Смотрите также:
строки: Java Глоссарий
Цитата из этой статьи:
Коллекция строк, зарегистрированных в этой HashMap, иногда называется пулом строк. Тем не менее, они являются обычными объектами и живут в куче, как и любые другие (возможно, оптимизированным способом, поскольку интернированные строки имеют тенденцию быть долгоживущими).