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


**String 类的 intern() 方法**可以用来处理 Java 中的**字符串重复问题**。使用 **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

更新时间: 2020年2月7日

352 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.