String拓展:intern()方法

String s1 = new String("1") + new String("1");//s1变量记录的地址为:new String
s1.intern();//在字符串常量池中生成"11"。如何理解:jdk6:创建了一个新的对象"11",也就有新的地址;jdk7:此时常量池中并没有创建"11",而是创建了一个指向堆空间中new String("11")的地址;
String s2 = "11";
System.out.println(s1 == s2);//jdk6:false;jdk7:true

总结String中intern()方法的使用:

jdk6中:

将这个字符串常量池尝试放入字符串常量池。

如果常量池中有,则不会方法。返回已有的常量池中对象的地址;

如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址;

jdk7中:

将这个字符串常量池尝试放入字符串常量池。

如果常量池中有,并不会放入。返回已有的常量池中的对象的地址;

如果没有,会把对象的引用地址复制一份,放入常量池,并返回常量池中的引用地址;

猜你喜欢

转载自blog.csdn.net/guorui_java/article/details/109787051