我们何时可以在 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