java中的字符串内存分配

Joh*_*ohn 2 java memory string

在Servlet类中,我正在检查

if("Mail".equals(request.getParameter(mode))||"Chat".equals(request.getParameter(mode))){}

我的问题是为字符串"Mail"和"Chat"分配的内存.它是否会为每个对此servlet的请求创建新的字符串对象.GC怎么样?

Jon*_*eet 6

不,它不会每次都创建一个新对象.字符串常量被实现 - 它们被创建一次并放入一个特殊的池中.

每次运行代码时,它不仅不会创建新的字符串,而且如果在代码中的其他位置使用常量"Mail"或"Chat",它们也将使用相同的字符串对象.

从Java语言规范部分3.10.5:

每个字符串文字都是类String(第4.3.3节)的实例(第4.3.1节,第12.5节)的引用(第4.3节).String对象具有常量值.字符串文字 - 或者更一般地说,作为常量表达式(第15.28节)的值的字符串 - 是"实例化"以便使用String.intern方法共享唯一实例.