kor*_*doo 1 java expression operators
boolean a = false;
boolean b = false;
boolean c = false;
boolean bool = (a = true) || (b = true) && (c = true);
System.out.println("" + a + b + c);
Run Code Online (Sandbox Code Playgroud)
prceding代码打印truefalsefalse.但是,&&操作员的优先级高于||操作员,应首先进行评估,为什么不打印truetruetrue呢?
我相信你问题的症结在于这一部分:
但是,&&运算符的优先级高于|| 操作员,应首先评估
不会.优先顺序不会影响执行顺序.这是有效的包围.所以你的表达相当于:
boolean bool = (a = true) || ((b = true) && (c = true));
Run Code Online (Sandbox Code Playgroud)
...仍然a = true首先执行.此时,由于结果肯定是true并且||正在短路,因此右手操作数||不会被执行,因此b并且c是错误的.
在评估右侧操作数的任何部分之前,似乎完全评估了二元运算符的左侧操作数.
优先权与此无关.