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

时间:2016-11-21 09:31:02

标签: java string string-pool

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

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

我希望在这两种情况下都能成真。

3 个答案:

答案 0 :(得分:2)

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

在上面的例子中,您将比较实习字符串"Apple"的引用与堆上另一个字符串的引用(但具有相同值)。因此,结果是" false"。

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

在上面的例子中,您将String常量池的引用与尝试添加的引用进行比较" Apple"到String常量池。 SInce," Apple"已经在第一行,这个实习将返回str1指向的对象。因此,你会成真。

PS:javadoc

中描述了此行为

答案 1 :(得分:0)

这样做#create an empty list to put numbers in a = [] #open file and read the lines with open("SO_sumofnumers.txt", "r") as f: lines = f.readlines() for line in lines: #split each line by the separator (",") l = line.split(",") for entry in l: # append each entry # removing line-end ("\n") where necessary a.append(int(entry.split("\n")[0])) print a #sum the elements of a list s = sum(a) print s 给你的尝试带来了什么...... 由于str1.intern()是一个文字字符串(它将被放置在字符串池中),并且您将它与在堆上分配的str1进行比较...

因此

str2

将打印System.out.println(str1.intern() == str2); ,您正在比较搅拌池中字符串与堆上字符串的引用...

答案 2 :(得分:0)

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

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