我们何时可以在 Java 中使用 String 类的 intern() 方法?

javaobject oriented programmingprogramming更新于 2024/7/26 22:48:00

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

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

Java 默认自动驻留所有字符串。intern() 方法可以在带有 new String() 的字符串中使用,以便通过 == 运算符进行比较。

示例

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

相关文章