【发布时间】:2019-10-16 23:07:42
【问题描述】:
有人能告诉我为什么 a 的值在下面的代码中没有改变吗?
int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);
【问题讨论】:
标签: java
有人能告诉我为什么 a 的值在下面的代码中没有改变吗?
int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);
【问题讨论】:
标签: java
您正在看到“短路评估”。布尔表达式(++a==11) 的第二部分永远不会被计算,因为(a < 5) 是假的。在这种情况下,JVM 在计算 (++a==11) 之前就知道整个表达式为假,因此它完全跳过它。
这也是为什么这种“副作用”在逻辑测试中不好的一个很好的例子:你正在以一种不可预测的方式改变你正在评估的值。在一个非平凡的程序中,你不一定知道(a < 5)是否为真,所以很难知道a是否会递增。
【讨论】: