我有以下代码片段。我的输出为false
,表示字符串s1
和s2
的引用相等。
这不应该是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);
}
答案 0 :(得分:3)
在您的程序中,计算是在运行时进行的,编译器不知道s1
和s2
将是相等的字符串,因此它不会成为常量池的一部分。如果你这样做:
String s1 = "I hate Winters";
String s2 = "I hate" + " Winters";
连接将在编译时发生,它们将指向池中的相同文字。