Java中的常量池是一块用于存储运行时常量或者符号的区域。
主要有字符串常量池和运行时常量池。
字符串常量池用于存储字符串字面量,可以通过String类中的intern()方法复用常量池中的字符串对象,若不存在则将当前字符串对象入池。
Java6中的字符串常量池位于方法区中的永久代中,Java7及以后位于堆内存中的特殊区域。
在Java中,字符串的创建方式有两种,一种是直接使用字面量 ,另一种是使用new关键字。
运行时常量池存储的是每个类或者接口的Class文件编译时生成的常量信息。
需要说明的是,按照JVM的定义来说,字符串常量池 逻辑上还是属于运行时常量池,只是因为字符串的高频使用,被单独抽离出来做了优化设计。