跳到主要内容

Java字符串intern()方法

字符串 intern() 方法的语法是:

string.intern()

这里,stringString 类的一个对象。

intern() 方法参数

intern() 方法不接受任何参数。

intern() 方法返回值

  • 返回字符串的规范表示形式

什么是 Java 字符串内部化(Interning)?

字符串内部化确保所有内容相同的字符串使用相同的内存。

假设我们有这两个字符串:

String str1 = "xyz";
String str2 = "xyz";

由于 str1str2 的内容相同,这两个字符串将共享相同的内存。Java 会自动内部化字符串字面量。

然而,如果你使用 new 关键字创建字符串,这些字符串就不会共享相同的内存。例如,

class Main {
public static void main(String[] args) {

String str1 = new String("xyz");
String str2 = new String("xyz");

System.out.println(str1 == str2); // false

}
}

从这个示例中可以看出,str1str2 的内容相同。然而,它们并不相等,因为它们不共享相同的内存。

在这种情况下,你可以手动使用 intern() 方法,使得具有相同内容的字符串使用相同的内存。

示例:Java String intern() 方法

class Main {
public static void main(String[] args) {

String str1 = new String("xyz");
String str2 = new String("xyz");

// str1 和 str2 不共享相同的内存池
System.out.println(str1 == str2); // false

// 使用 intern() 方法
// 现在 str1 和 str2 共享相同的内存池
str1 = str1.intern();
str2 = str2.intern();

System.out.println(str1 == str2); // true
}
}

正如你所看到的,str1str2 的内容相同,但最初它们并不相等。

然后我们使用 intern() 方法,使得 str1str2 使用相同的内存池。使用 intern() 之后,str1str2 就相等了。