java中的字符串内存分配

时间:2010-11-12 06:27:48

标签: java string memory

在Servlet类中,我正在进行检查

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

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

1 个答案:

答案 0 :(得分:6)

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

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

来自Java语言规范section 3.10.5

  

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