字符串文字的引用相等

时间:2014-12-14 13:27:56

标签: java string reference string-literals

我有以下代码片段。我的输出为false,表示字符串s1s2的引用相等。

这不应该是true吗?字符串在Java中是不可变的,当我使用与s2相同的内容创建s1时(我讨厌Winters),引用s2将简单地指向已经存在的String对象s1

public static void main(String[] args) {

    String s1="I hate"; 
    s1=s1+" Winters"; 

    String s2="I hate Winters";

    System.out.println(s1==s2);
}

1 个答案:

答案 0 :(得分:3)

在您的程序中,计算是在运行时进行的,编译器不知道s1s2将是相等的字符串,因此它不会成为常量池的一部分。如果你这样做:

String s1 = "I hate Winters"; 
String s2 = "I hate" + " Winters"; 

连接将在编译时发生,它们将指向池中的相同文字。