Java如何评估此声明?

Leo*_*ley 0 java evaluation expression operator-precedence

我在if else语句中有这个表达式

if (row % 2 == 0 && col % 2 == 0 || row % 2 == 1 && col % 2 == 1) {
    return 0;
}
else {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

其行为与预期相同,当行和列均为偶数或两者都为奇数时返回0.困惑我的是Java如何不读它

(row % 2 == 0 && (col % 2 == 0 || row % 2 == 1 && col % 2 == 1))
Run Code Online (Sandbox Code Playgroud)

Java如何评估没有括号的语句?

Ste*_*n C 6

Java如何读取没有括号的语句?

通过应用运算符优先级规则.Java语言规范说它&&具有更高的优先级||,这意味着:

    row % 2 == 0 && col % 2 == 0 || row % 2 == 1 && col % 2 == 1
Run Code Online (Sandbox Code Playgroud)

相当于:

    (row % 2 == 0 && col % 2 == 0) || (row % 2 == 1 && col % 2 == 1)
Run Code Online (Sandbox Code Playgroud)

事实上,==优先级高于&&,因此相当于:

    ((row % 2 == 0) && (col % 2 == 0)) || ((row % 2 == 1) && (col % 2 == 1))
Run Code Online (Sandbox Code Playgroud)

Java Tutorial中的这个页面提供了有关运算符优先级及其如何影响表达式求值的更多信息.


对于它的价值,编程语言中的运算符优先级与简单算术表达式的含义之间存在着自然的平行......正如你在小学教过的那样.例如,你被教导1 + 2 x 3意味着同样的事情1 + (2 x 3); 即答案是79.在技​​术术语中,x(乘法)运算符的优先级高于+(加法)运算符.

这个想法在典型的编程语言中是相同的,除了有更大范围的运算符来处理......并且规则(一般来说)更精确地指定1.

1 - 例如,由于初级和运算符的评估在某些情况下可能会产生副作用,因此了解子表达式的精确排序顺序非常重要.


roc*_*boy 5

那是因为优先顺序.&&优先于||.

你看这里.