这是关于String的一个非常基本的问题。
String str1 = "abc";
String str2 = "abc";
System.out.println("out put " + str1 == str2);
我执行程序时感到很震惊。我得到false
。
据我所知,如果另一个字符串想要指向相同的字符串文字,则字符串文字在字符串引用之间共享。 JVM将首先在String池中检查它,如果它不存在则会创建一个并提供引用,否则它将在多个String引用之间共享,就像在这种情况下一样(根据我)。
因此,如果我遵循我的理论,那么它应该返回true
作为String引用指向同一个字符串文字。
答案 0 :(得分:4)
您需要执行以下操作才能正确检查: -
System.out.println("out put " + (str1 == str2));
这将按预期为真。
你的陈述" out put" + str1然后尝试将其与str2
等同答案 1 :(得分:0)
你对String的行为是正确的。但是,你忘记了operator precedence.第一次添加被执行,后来是平等。
因此,在您的情况下,首先执行"out put " + str1
,这会产生"out put abc"
。稍后将其与str2
进行比较,后者为false
。
你的意思是"out put " + (str1 == str2)
,确实给了true
。