有人能告诉我为什么下面的代码中 a 的值没有改变吗?
int a = 10;
System.out.print( (a < 5) && (++a==11));
System.out.println(a);
最佳答案
您正在看到“短路评估”的实际效果。 boolean 表达式的第二部分(++a==11)
从未被评估,因为 (a < 5)
是假的。在这种情况下,JVM 在计算 (++a==11)
之前就知道整个表达式为 false。 ,所以它完全跳过它。
这也是为什么这种“副作用”在逻辑测试中很糟糕的一个很好的例子:你正在以不可预测的方式改变你正在评估的值。在一个不平凡的程序中,您不一定知道 (a < 5)
是否是真的,所以很难知道是否a
是否会增加。
关于java - 为什么输出是 "false10"而不是 "false11"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422780/