java的常量池分为两种型态:静态常量池和运行常量池
静态常量池:
即class文件中的常量池,这种常量池主要用于两大类常量,字面量和符号引用量。
字面量相当于java语言层面的常量,如文本字符串,声明为final的常量值等
符号引用量则属于编译方面的概念,包含如下三种类型的常量:
- 类和接口的全限定名
- 字段名称和描述名称
- 方法名称和描述符
运行时常量池
则是JVM虚拟机加载完class文字内的常量载入到内存中,并保存在方法中,这就是常说的常量池
string.intern()方法就是使在非编译器的常量保存到常量池中,String.intern()会查找常量池是否存在一份equal相等的字符串,有则返回引用,没有则添加进常量池中。
相同的字符串,系统不会申请两个空间,只会保留一个,其他返回第一个地址
网友评论