有人可以告诉我为什么在以下代码中a的值没有变化吗?
int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);
答案 0 :(得分:0)
您正在看到“短路评估”。布尔表达式(++a==11)
的第二部分从不求值,因为(a < 5)
为false。在这种情况下,JVM在评估(++a==11)
之前就知道整个表达式为假,因此它会完全跳过它。
这也是一个很好的例子,说明了为什么这种“副作用”在逻辑测试中很糟糕:您正在以一种无法预测的方式对要评估的值进行变异。在非平凡的程序中,您不必知道(a < 5)
是否为真,因此很难知道a
是否将递增。