Будет ли строка, полученная из http-запроса, сохранена в постоянном пуле?

Я понимаю, что строка, объявленная как следующая, будет сохранена в пуле констант:

например.

String a = "test'; 

тогда тест будет сохранен в пуле

Интересно, получена ли строка из метода, например, из параметра запроса, отправленного из веб-формы, или прочитанного из файла. Например.

String name = request.getRequestParameter("name");

Будет ли сохранено значение в имени в постоянном пуле? Я полагаю, это не так? потому что в противном случае у вас скоро будет ошибка памяти?

Может кто-нибудь, пожалуйста, просветите меня?

Спасибо

1 ответ

Решение

Нет. Когда и как строки intern Эд описан в String#intern документация и раздел JLS 3.10.5. По сути, литералы и (другие) строковые константы являются автоматически интернированными, но больше ничего не произойдет, если вы не сделаете это явно.

Как побочный эффект, вы, похоже, предполагаете, что интернированные строки никогда не собираются сборщиком мусора. Я не вижу в документации по Java ничего такого, что действительно говорит об этом, и, по крайней мере, один человек заявляет, что его тесты показывают, что они на самом деле являются GC, предполагая, что в пуле интернов используется некая форма слабой ссылки.

Другие вопросы по тегам