intern()的使用:
JDK1.6中,将这个字符串对象尝试放入串池。
- 如果串池中有,则并不会放入。返回已有的串池中的对象的地址
- 如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址
JDK1.7起,将这个字符串对象尝试放入串池。
- 如果串池中有,则并不会放入。返回已有的串池中的对象的地址
- 如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址
// c在堆和字符串常量池中都创建了,c记录的是堆中的地址,d记录的是字符串常量池中的地址,所以不相等
String c= new String("c");
c.intern();
String d="c";
System.out.println(c ==d);//false
// 创建了一个StringBuffer 两个new String 一个d的字符串空间 一个f的字符串空间 一个new String,然后调用tostring,一共是六个对象
String e = new String("d")+new String("f");
// 因为字符串常量池中没有df,就去创建,会把e对象的引用地址复制一份,放入串池,并返回串池中e的引用地址,对比的时候地址相同所以就相等了
e.intern();
String f = "df";
System.out.println(e == f);// true