3

我了解声明如下的 String 将保存在常量池中:

例如。

String a = "test'; 

然后测试将保存在池中

我想知道字符串是从方法获取的,例如从网络表单发布的请求参数,还是从文件中读取。例如。

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

名称中的值会保存在常量池中吗?我猜不是?因为否则你很快就会出现内存不足的perm gen错误?

谁能启发我?

谢谢

4

1 回答 1

3

否。文档和 JLS第 3.10.5 节intern中描述了何时以及如何编辑字符串。基本上,文字和(其他)字符串常量是自动实习的,但除非你明确地这样做,否则没有其他可能。String#intern

作为一个侧面,您似乎假设实习字符串永远不会被垃圾收集。我在 Java 文档中没有看到任何内容实际上是这样说的,并且至少有人声称他的测试表明它们实际上是经过 GC 处理的,这表明实习池使用了某种形式的弱引用。

于 2013-03-09T11:15:47.357 回答