为什么输出为“ false10”而不是“ false11”?

时间:2019-10-16 23:07:42

标签: java

有人可以告诉我为什么在以下代码中a的值没有变化吗?

int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);

1 个答案:

答案 0 :(得分:0)

您正在看到“短路评估”。布尔表达式(++a==11)的第二部分从不求值,因为(a < 5)为false。在这种情况下,JVM在评估(++a==11)之前就知道整个表达式为假,因此它会完全跳过它。

这也是一个很好的例子,说明了为什么这种“副作用”在逻辑测试中很糟糕:您正在以一种无法预测的方式对要评估的值进行变异。在非平凡的程序中,您不必知道(a < 5)是否为真,因此很难知道a是否将递增。