intern是String类的一个成员方法,它是一个native方法,该方法会首先从字符串常量池中检测该字符串对象是否存在:
- 如果存在就返回字符串常量池中,该对象的引用;
- 如果不存在就将存在于堆上字符串对象的引用存入常量池(不会在字符串常量池中创建新对象)
String s1 = "Hello";
String s2 = new String("Hello");
String s3 = new String("World");
String s4 = s2 + s3;
System.out.println(s1 == s2.intern()); // true
System.out.println(s2 == s2.intern()); // false
System.out.println(s3 == s3.intern()); // false
System.out.println(s4 == s4.intern()); // true