java - java中字符串的内存分配

标签 java string memory

在 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/

相关文章:

MySQL 字符串中多次出现相同的字母

python - 找出还有谁在引用,大数据

ios - 如何使用大型 csv 文件管理 ios 的内存?

c - 递归函数中的内存泄漏

java - 启动时 PHPStorm7 "Failed to create JVM: error code -4"

java - Jython 打印所有终端输出/将输出分配为字符串

java - Hadoop体系结构内部:使用作业和任务跟踪器

java - 在 Java 中创建一个新线程有多昂贵?我们什么时候应该考虑使用线程池?

swift - 如何在 iOS Swift 4.2 中获取范围内的子字符串

c - 在目标包含源的地方使用 strncpy()