在 intern() 方法之后比较两个相等的字符串

Comparing two equal Strings after intern() method

Javadoc 说,如果在字符串池中有一个相等的字符串,intern() 方法将 return 字符串。

public class Demo {
public static void main(String[] args) {
    String str1 = "Apple";
    String str2 = new String("Apple");

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

我希望在这两种情况下都能实现。

这样做 str1.intern() 对您的尝试没有任何帮助... 由于 str1 是一个文字字符串(它将被立即放置在字符串池中),并且您正在将它与分配在堆上的 str2 进行比较...

因此

System.out.println(str1.intern() == str2); 

将打印 false,您正在比较 Stirng 池中的字符串与堆中的字符串的引用...

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

在上面的例子中,你正在比较 interned String "Apple" 的引用和堆上另一个 String 的引用(但具有相同的值)。所以,结果是 "false".

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

在上述情况下,您将字符串常量池的引用与通过 尝试将 "Apple" 添加到字符串常量池中获得的引用进行比较。 SInce, "Apple" 已经在第一行了,这次实习将return str1指向的对象。因此你是真的。

PS :此行为在 javadoc

中进行了描述

String.intern() 方法用于在 String 常量池中创建 heap String 对象的精确副本。 String 常量池中的 String objects 会自动驻留,但 heap 中的 String 对象不会

System.out.println(firstString.intern() == secondString);//false because it will fetch exact copy of the string compare in string

System.out.println(firstString == secondString.intern());//True because it will compare firstString with fetch the second String it will check heap or not