在 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
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