-3

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

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

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

4

3 回答 3

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

在上述情况下,您将实习字符串"Apple"的引用与堆上的另一个字符串的引用(但具有相同的值)的引用进行比较。所以,结果是“假的”。

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

在上述情况下,您将字符串常量池的引用与尝试将“Apple”添加到字符串常量池中的引用进行比较。因为“Apple”已经在第一行,这个实习将返回 str1 指向的对象。因此你得到真实。

PS:此行为在javadoc中进行了描述

于 2016-11-21T09:35:32.623 回答
0

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

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
于 2016-11-21T09:57:37.710 回答
0

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

所以

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

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

于 2016-11-21T09:34:39.313 回答