抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

String常量池和String.intern方法学习

JDK1.6

在JDK1.6中,字符串常量池是在方法区里,它属于永久代。因此字符串字面量和字符串对象是在两个不同的空间的,他们的地址肯定不一样。

JDK1.6中intern方法的作用是,检查字符串常量池里是否有该字符串,如果有就返回字符串常量池里的字符串,否则在字符串常量池里新建一个字符串,并返回。

JDK1.7

在JDK1.7中,字符串常量池被移动到了堆里,因此字符串字面量和字符串对象在一个空间里了,状况就不一样了。

JDK1.7里intern方法作用是,检查字符串常量池里是否有该字符串,如果有就返回字符串常量池里的字符串,如果堆中有就存储堆中对象的引用否则创建一个字符串,并返回。

1
2
3
4
5
6
7
8
9
1.只在常量池上创建常量
String a1 = "AA";
2.只在堆上创建对象:调用toString方法或者+
String a2 = new String("A") + new String("A");
3.在堆上创建对象,在常量池上创建常量
String a3 = new String("AA");
4.在堆上创建对象,在常量池上创建引用
String a4 = new String("A") + new String("A");//只在堆上创建对象AA
a4.intern();//将该对象AA的引用保存到常量池上