String常量池和String.intern方法学习
JDK1.6
在JDK1.6中,字符串常量池是在方法区里,它属于永久代。因此字符串字面量和字符串对象是在两个不同的空间的,他们的地址肯定不一样。
JDK1.6中intern方法的作用是,检查字符串常量池里是否有该字符串,如果有就返回字符串常量池里的字符串,否则在字符串常量池里新建一个字符串,并返回。
JDK1.7
在JDK1.7中,字符串常量池被移动到了堆里,因此字符串字面量和字符串对象在一个空间里了,状况就不一样了。
JDK1.7里intern方法作用是,检查字符串常量池里是否有该字符串,如果有就返回字符串常量池里的字符串,如果堆中有就存储堆中对象的引用否则创建一个字符串,并返回。
1 | 1.只在常量池上创建常量 |