根据我之前的知识,(逻辑AND)比(逻辑OR)具有更高的优先级,因此例如在以下Java代码行中,
boolExp2
将与boolExp3
进行比较,然后再将boolExp1
与boolExp2
进行比较:
boolean b = boolExp1 || boolExp2 && boolExp3
等同于:
boolean b = boolExp1 || (boolExp2 && boolExp3)
但是在下面的例子中我不认为这是真的,在下面的代码中我有一个int变量
x
,它等于1,当代码递增x
时,它在这行代码中:
boolean b = (1<2) || (6<x++) || (++x>9) && (true^false) ^ (x++<7);
这行执行后,变量
x
的值没有改变,这是否与代码中的“短路”有关,我不是这方面的专家,还是有其他原因?
完整的java代码:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 1;
boolean b = (1<2) || (6<x++) || (++x>9) && (true^false) ^ (x++<7);
System.out.println(b);
System.out.println("x = "+ x);
}
}
**输出: **
true
x = 1
**期望: **
true
x = 4
请提供详细的代码执行情况。
谢谢。