Java 中 String intern() 方法的作用是什么?


String 是 Java 中一个用于存储字符序列的类,它属于 java.lang 包。一旦创建了 String 对象,就无法修改它们(不可变)。

存储

所有 String 对象都存储在堆区的另一个内存位置,称为 String 常量池

每当你定义一个 String 值时,JVM 都会在 String 常量池中创建一个具有该值的 String 对象。因此,如果你运行上述程序,将在 String 常量池中创建两个 String 值。

intern() 方法

此方法从唯一 String 值池中返回当前 String 的值。每当你对特定 String 调用此方法时,如果 String 常量池中已经包含一个与之相等的 String(根据 Object 类的 equals 方法),则将返回该 String。否则,当前 String 将添加到 String 常量池中并返回对它的引用。

即,如果你对两个具有相同内容的 String 调用此方法,则保证它们共享相同的内存。

此方法有助于减少在存在多个重复值的情况下占用的内存。

示例

在下面,我们创建了两个具有相同内容的 String(使用 new 关键字)并使用“==”运算符比较它们。尽管这两个对象具有相同的值,但由于它们不引用同一个对象(内存),因此结果将为 false。

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = "Hello";
      str2 = str2.intern();
      System.out.println(str1.equals(str2));
   }
}

输出

false

但是,如果你在比较它们之前对这两个对象调用 intern 方法,由于它确保如果这两个对象具有相同的内容则共享相同的内存,因此结果将为 true。

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = new String("Hello");
      str2 = str2.intern();
      System.out.println(str1==str2);
   }
}

输出

true

更新于: 2019年10月10日

100 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.