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

Cog*_*man 8 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
Run Code Online (Sandbox Code Playgroud)

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

有谁知道这背后的原因?

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

Oli*_*rth 13

因为在传统的数学符号中,and(逻辑连接)具有比or(逻辑分离)更高的优先级.

由于显而易见的原因,所有非深奥的编程语言都将反映现有的此类事物的约定.


Sne*_*tel 11

&&是乘法(x && y == x * y)||的布尔模拟,而是addition(x || y == (bool)(x + y))的布尔模拟.由于乘法具有比加法更高的优先级,因此使用相同的约定.

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