为什么&&优先级高于|| (JAVA)

时间:2013-12-30 17:12:13

标签: java operator-precedence

    boolean a = true;
    boolean b = true;
    boolean c = false;

    System.out.println(a || b && c); // true
    System.out.println(b && c || a); // true

我刚刚发现了我认为有点古怪的东西。为什么&&||处于不同的优先级?我原以为他们处于同一水平。以上说明了这一点。这两个陈述都是正确的,即使从左到右的评价对第一个给出错误而对第二个给出为真。

有谁知道这背后的原因?

(顺便说一句,我本来只是在这里使用了一大堆括号,但这是旧代码提出的问题)

4 个答案:

答案 0 :(得分:10)

因为在传统的数学符号中,andlogical conjunction)的优先级高于orlogical disjunction)。

出于显而易见的原因,所有非深奥的编程语言都会反映现有的这类事物的惯例。

答案 1 :(得分:9)

&&是乘法(x && y == x * y)的布尔类比,而||是加法(x || y == (bool)(x + y))的布尔类比。由于乘法的优先级高于加法,因此使用相同的约定。

请注意,布尔表达式最常见的“规范”形式是一堆or-ed together和-clause,所以这与此相吻合。

答案 2 :(得分:1)

这是此类运营商的惯例优先顺序。其他语言(如C ++)也具有相同的优先顺序。数学符号也是如此,见here

答案 3 :(得分:-2)

据我所知,&&即,和 - 运算符的优先级高于||,即大多数语言中的运算符。我不知道任何一个人有相反的优先权。