我了解声明如下的 String 将保存在常量池中:
例如。
String a = "test';
然后测试将保存在池中
我想知道字符串是从方法获取的,例如从网络表单发布的请求参数,还是从文件中读取。例如。
String name = request.getRequestParameter("name");
名称中的值会保存在常量池中吗?我猜不是?因为否则你很快就会出现内存不足的perm gen错误?
谁能启发我?
谢谢
否。文档和 JLS第 3.10.5 节intern
中描述了何时以及如何编辑字符串。基本上,文字和(其他)字符串常量是自动实习的,但除非你明确地这样做,否则没有其他可能。String#intern
作为一个侧面,您似乎假设实习字符串永远不会被垃圾收集。我在 Java 文档中没有看到任何内容实际上是这样说的,并且至少有人声称他的测试表明它们实际上是经过 GC 处理的,这表明实习池使用了某种形式的弱引用。