在 Servlet 类中,我正在进行检查
if("邮件".equals( request.getParameter(mode)) || "聊天".equals( request.getParameter(mode))) {}
我的问题是关于为字符串“Mail”和“Chat”分配的内存。它会为该 servlet 的每个请求创建新的字符串对象吗?那么GC呢?
最佳答案
不,它不会每次都创建一个新对象。字符串常量被保留 - 它们被创建一次并放入一个特殊的池中。
它不仅不会在您每次运行代码时创建新字符串,而且如果您在代码中的其他位置使用常量“Mail”或“Chat”,它们也会使用相同的字符串对象。
来自 Java 语言规范 section 3.10.5 :
Each string literal is a reference (§4.3) to an instance (§4.3.1, §12.5) of class String (§4.3.3). String objects have a constant value. String literals-or, more generally, strings that are the values of constant expressions (§15.28)-are "interned" so as to share unique instances, using the method String.intern.
关于java - java中字符串的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162174/