假设我有以下代码:
int j = 0;
boolean x = true, y = false, z;
z = (x || ((j++) == 0));
z = (y || ((j += 2) > 0));
j的最终值将为 2
在第一次分配中,z将具有 true 或 false ,这是真的
z在第二次分配中,将有 false 或 true ,这是真的
为什么最终值为2? 有真有效之间有什么区别?假和假||是真的吗?
我不是在询问“短路”运营商,
我只需要对assign运算符进行更多解释,以及第一个j如何不改变 j 的值,而第二个j的值是如此。
答案 0 :(得分:3)
||操作员从左到右验证。
在你的情况下,
第一个条件true || false
,一旦||
找到true
,就不必检查其他条件,因为无论如何结果都是真的。这就是x||((j++)==0)
一旦x = true的原因,如果想到,则跳过下一个语句(j++==0)
。
第二个条件false || true
,一旦||
找到false
,必须检查以查找下一个条件。
参考> https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
&&和||运算符执行条件AND和条件OR 对两个布尔表达式的操作。这些运营商展出 “短路”行为,这意味着第二个操作数是 仅在需要时进行评估。