测试源码
public static void main(String[] args) {
String s = new String("a");
s.intern();
String s2 = "a";
System.out.println(s == s2);
String s3 = new String("a") + new String("a");
s3.intern();
String s4 = "aa";
System.out.println(s3 == s4);
}
JDK8:
false
true
--------------------------------------------------------
JDK6:
false
false
准备知识
不同JDK版本之前的intern()方法的区别-- JDK6 VS JDK6+
- JDK6:当调用intern方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该字符串的引用。否则,将此字符串对象添加到字符串常量池中,并且返回该字符串对象的引用
- JDK6+:当调用intern方法时,如果字符串常量池先前已创建出该字符串对象,则返回池中的该对象的引用。否则,如果该字符串对象已经存在与java堆中,则将堆中对此对象的引用***添加***到字符串常量池中,并且返回该引用;如果堆中不存在,则创建该字符串并返回其引用。