2014-09-13 121 views
3

这是关于字符串的一个非常基本的问题。有关字符串的基本查询

String str1 = "abc"; 
String str2 = "abc"; 

System.out.println("out put " + str1 == str2); 

当我执行程序时,我感到震惊。我得到了false

据我,字符串文字字符串引用之间,如果另一个字符串要指向同一个字符串字面共享。 JVM将首先在String池中检查它,如果它不存在,那么它将创建一个并给出引用,否则它将在多个String引用之间共享,就像在这种情况下(根据我)。

所以,如果我用我的理论去那么它应该已经返回true同时作为字符串参考点,以相同的字符串文字。

+3

@broncoAbierto这不是同一个问题。 OP似乎很好地理解了引用比较,并且打算测试常量字符串interning。这个问题是运营商的优先。 – kiheru 2014-09-13 09:24:40

+0

@kiheru你说得对。我收回我的评论。 – broncoAbierto 2014-09-13 09:28:36

回答

4

你需要做到以下几点正确检查: -

System.out.println("out put " + (str1 == str2)); 

预期这会给你正确的。

你的语句做“出来放” + str1和随后试图与STR2

0

等同起来你说得对字符串的行为。但是,您忘记了operator precedence.第一个加法被执行,后来相等。

所以,你的情况,首先"out put " + str1被执行,这给"out put abc"。稍后将其与str2进行比较,其给出false

你的意思"out put " + (str1 == str2),这的确给true