String.intern() 是⼀个 native(本地)⽅法,其作⽤是将指定的字符串对象的引⽤保存在字符串常量 池中,可以简单分为两种情况:
- 如果字符串常量池中保存了对应的字符串对象的引⽤,就直接返回该引⽤。
- 如果字符串常量池中没有保存了对应的字符串对象的引⽤,那就在常量池中创建⼀个指向该字符 串对象的引⽤并返回。
// 在堆中创建字符串对象”Java“
// 将字符串对象”Java“的引⽤保存在字符串常量池中
String s1 = "Java";
// 直接返回字符串常量池中字符串对象”Java“对应的引⽤
String s2 = s1.intern();
// 会在堆中在单独创建⼀个字符串对象
String s3 = new String("Java");
// 直接返回字符串常量池中字符串对象”Java“对应的引⽤
String s4 = s3.intern();
// s1 和 s2 指向的是堆中的同⼀个对象
System.out.println(s1 == s2); // true
// s3 和 s4 指向的是堆中不同的对象
System.out.println(s3 == s4); // false
// s1 和 s4 指向的是堆中的同⼀个对象
System.out.println(s1 == s4); //true