我理解声明为以下内容的String将保存在常量池中:
例如
String a = "test';
然后测试将保存在池中
我想知道从一个方法中获取String,例如从Web表单发布的请求参数,或从文件中读取。 例如
String name = request.getRequestParameter("name");
名称中的值是否会保存在常量池中?我认为不是吗?因为否则你很快就会出现内存不足的错误?
任何人都可以开导我吗?
由于
答案 0 :(得分:3)
没有。 String#intern
documentation和JLS Section 3.10.5中描述了intern
编辑字符串的时间和方式。基本上,文字和(其他)字符串常量是自动实现的,但除非你明确地这样做,否则没有其他内容。
作为一个侧面,你似乎假设被拦截的字符串永远不会被垃圾收集。我没有在Java文档中看到任何实际说的内容,并且at least one person声称他的测试表明他们实际上是GC'd,这表明实习池使用了一些形式的弱参考。