jdk1.7之后的intern()方法的作用:
1、若是字符串常量池中不存在这个字符串,那么,就创建一个引用,把该字符串实例对象的引用复制过来,并返回该地址。
2、若是字符串常量池中已存在该字符串,那么直接返回该字符串的地址。
下面举几个例子:
当使用intern()方法时,该字符串还未存在于常量池中。
public void internIsNotExistedTest() {
String a = new String("a") + new String("b");
a.intern();
String b = "ab";
System.out.println(a == b); //true
}
在执行a.intern()之前,字符串常量池中并没有存在“ab”,故执行完该语句之后,字符串常量池中会有一个指向该实例对象的引用。如下图所示:
当使用intern()时,字符串已存在在常量池中。
public void internIsExistedTest() {
String a = new String("a");
a.intern();
String b = "a";
System.out.println(a == b);//false
}
因为执行new String(“a”)时,会先把“a”放进常量池中,所以在执行a.intern()之前,“a”就已经在常量池中了。