Java ==表达模糊

时间:2013-11-18 18:43:44

标签: java

我在Facebook小组中遇到过这个问题。我知道我应该使用equals()方法,但我想知道为什么会发生这种情况

class Main
{
    public static void main (String[] args)
    {
        String s1="abc:5";
        String s2="abc:5";
        System.out.println(s1==s2);
        System.out.println("s1 == s2 " + s1==s2);
    }
}

输出

true
false

8 个答案:

答案 0 :(得分:16)

这是由于运营商的优先级。 '+'的优先级高于==。您实际上是在比较(“s1 == s2”+ s1)和s2。

http://introcs.cs.princeton.edu/java/11precedence/

答案 1 :(得分:6)

混乱是按操作顺序排列的。发生的事情是,您正在联接"s1 == s2 "s1,然后在该结果和==上使用s2

它们是不同的对象,因此打印false(并且不打印"s1 == s2")。括号:

System.out.println("s1 == s2 " + (s1==s2));

这将打印s1 == s2 true,因为s1s2都引用相同的字符串字面值"abc:5"

答案 2 :(得分:5)

哦,我只是在代码中进行了一些更改,让+首先"s1 == s2 s1"然后== s2,而不是class Main { public static void main (String[] args) { String s1="abc:5"; String s2="abc:5"; System.out.println(s1==s2); System.out.println("s1 == s2 " + (s1==s2)); System.out.println("s1 == s2 " + s1==s2); } } 。新代码

true
s1 == s2 true
false

输出

{{1}}

答案 3 :(得分:2)

这很容易理解一旦你想到它:2. println首先添加“s1 == s2”和你的字符串s1然后将它与s2进行比较,所以它输出false,因为“s1 == s2abc:5 “不是”abc:5“

答案 4 :(得分:2)

添加字符串"s1 == s2 " + s1,然后计算它是否等于s2。它不是打印false

Java Operator Precedence可能会对您有所帮助。

答案 5 :(得分:2)

我认为在使用“==”时,系统只会检查两个东西是否在系统内存中共享相同的位置。但是,如果使用“.equals”方法,系统将检查两个字符串是否共享相同的字符。

答案 6 :(得分:1)

我认为这是因为运算符优先级如此,如果你执行System.out.println(""+(s1==s2));,它将打印为true。

答案 7 :(得分:1)

您的代码

    System.out.println(s1==s2);
    System.out.println("s1 == s2 " + s1==s2);

因为s1和s2是相同的字符串文字

`s1==s2` is true

因此代码可以写成

    System.out.println(true);   => true
    System.out.println("true" + s1==s2);

现在,“true”+ s1 == s2被理解为(“true”+ s1)== s2,因为给予“+”的优先级更高。因此

"true"+s1 => trueabc:5 and
s2 => "abc:5"

因此

    System.out.println("true" + s1==s2); => false