boolean a = true;
boolean b = true;
boolean c = false;
System.out.println(a || b && c); // true
System.out.println(b && c || a); // true
我刚刚发现了我认为有点古怪的东西。为什么&&
和||
处于不同的优先级?我原以为他们处于同一水平。以上说明了这一点。这两个陈述都是正确的,即使从左到右的评价对第一个给出错误而对第二个给出为真。
有谁知道这背后的原因?
(顺便说一句,我本来只是在这里使用了一大堆括号,但这是旧代码提出的问题)
答案 0 :(得分:10)
因为在传统的数学符号中,and
(logical conjunction)的优先级高于or
(logical disjunction)。
出于显而易见的原因,所有非深奥的编程语言都会反映现有的这类事物的惯例。
答案 1 :(得分:9)
&&
是乘法(x && y == x * y
)的布尔类比,而||
是加法(x || y == (bool)(x + y)
)的布尔类比。由于乘法的优先级高于加法,因此使用相同的约定。
请注意,布尔表达式最常见的“规范”形式是一堆or-ed together和-clause,所以这与此相吻合。
答案 2 :(得分:1)
这是此类运营商的惯例优先顺序。其他语言(如C ++)也具有相同的优先顺序。数学符号也是如此,见here。
答案 3 :(得分:-2)
据我所知,&&
即,和 - 运算符的优先级高于||
,即大多数语言中的运算符。我不知道任何一个人有相反的优先权。