在 Java 中,String.intern() 方法和常量池是密切相关的概念。在不同的 JDK 版本中,它们之间存在一些区别。本文将详细介绍 String.intern() 方法和常量池的概念,并解释不同 JDK 版本中它们的变化。
- 常量池
常量池是 Java 虚拟机(JVM)中的一块特殊区域,用于存储字符串常量和符号引用。它包含了在编译期间生成的所有字符串常量和字面量。常量池有两种形式:运行时常量池和类常量池。
运行时常量池是每个类或接口在运行时都有自己的常量池。它保存类中使用的常量,包括字符串常量和符号引用。类常量池则是在编译期间生成的,它包含类中的常量,用于支持字节码指令。
- String.intern() 方法
String.intern() 方法是 String 类提供的一个实例方法。它的作用是返回一个字符串的规范化表示,即返回常量池中的字符串对象。
当调用 String.intern() 方法时,如果常量池中已经存在该字符串,则返回常量池中的引用;否则,将当前字符串添加到常量池中并返回其引用。这意味着通过 intern() 方法可以将堆中的字符串对象转移到常量池中。
下面是一个示例代码:
String str1 = new
本文详细介绍了Java中的String.intern()方法与常量池的关系,以及在不同JDK版本(如JDK 6之前和JDK 7及以后)中的行为变化。在JDK 6之前,常量池位于 PermGen 区域,而JDK 7开始常量池被移到堆中,避免了PermGen内存溢出问题。String.intern()方法会确保返回常量池中的字符串引用,根据版本不同,可能在池中创建新对象或复制已有对象。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



