什么时候可以在Java中使用String类的intern()方法?

实习生()方法 String类可以用来处理 字符串的复制问题在Java中。使用intern(),可以节省大量重复字符串实例消耗的内存。如果一个字符串包含与另一个字符串相同的内容,则该字符串是重复的,但是可以被占用不同的存储位置。

我们知道JVM为字符串文字维护了一个单独的堆内存,以提高性能。一旦我们声明了字符串文字,它将进入该,如果为另一个变量分配了相同的文字值,则将从池中选择该变量,而不是创建新对象并将其存储在heap中。但是,如果使用新构造函数声明字符串,那么即使池中存在文字,也会创建一个新对象。为了避免这种情况并迫使JVM从池中选择文字,我们使用intern()方法。

Java默认情况下会自动实习所有字符串。的实习生()方法可与字符串中使用Ñ EWString(),以便通过对它们进行比较==操作符。

示例

public class StringInternClassTest {
   public static void main(String[] args) {
      String s1 = "Tutorix";
      String s2 = "Tutorix";
      String s3 = new String("Tutorix");
      final String s4 = s3.intern();
      String s5 = "?Tutorix".substring(1);
      String s6 = s5.intern();
      System.out.println(s1 == s2);
      System.out.println(s2 == s3);
      System.out.println(s3 == s4);
      System.out.println(s1 == s3);
      System.out.println(s1 == s4);
      System.out.println(s1 == s5);
      System.out.println(s1 == s6);
      System.out.println(s1.equals(s2));
      System.out.println(s2.equals(s3));
      System.out.println(s3.equals(s4));
      System.out.println(s1.equals(s4));
      System.out.println(s1.equals(s3));
   }
}

输出结果

true
false
false
false
true
false
true
true
true
true
true
true