Будет ли строка, полученная из http-запроса, сохранена в постоянном пуле?
Я понимаю, что строка, объявленная как следующая, будет сохранена в пуле констант:
например.
String a = "test';
тогда тест будет сохранен в пуле
Интересно, получена ли строка из метода, например, из параметра запроса, отправленного из веб-формы, или прочитанного из файла. Например.
String name = request.getRequestParameter("name");
Будет ли сохранено значение в имени в постоянном пуле? Я полагаю, это не так? потому что в противном случае у вас скоро будет ошибка памяти?
Может кто-нибудь, пожалуйста, просветите меня?
Спасибо
1 ответ
Нет. Когда и как строки intern
Эд описан в String#intern
документация и раздел JLS 3.10.5. По сути, литералы и (другие) строковые константы являются автоматически интернированными, но больше ничего не произойдет, если вы не сделаете это явно.
Как побочный эффект, вы, похоже, предполагаете, что интернированные строки никогда не собираются сборщиком мусора. Я не вижу в документации по Java ничего такого, что действительно говорит об этом, и, по крайней мере, один человек заявляет, что его тесты показывают, что они на самом деле являются GC, предполагая, что в пуле интернов используется некая форма слабой ссылки.