在java中评估布尔表达式时,我发现自己对短路评估和预修复增量运算符感到有些困惑.考虑以下:
int e=20;
int f=25;
if(++e>21 || ++e>21 && f>30){
System.out.println("Hi");
}
System.out.println(e);
Run Code Online (Sandbox Code Playgroud)
据我所知,如果++ e大于21,则IF语句的其余部分将跳过(由于短路eval).但在这种情况下,它不会,因为第一部分不是真的,所以我们继续讨论AND语句.此时,还是20?或者在短路评估期间,它是否达到了21?
好吧,我假设在这一点上,我们评估AND语句(正如我们通常在OR之前做的那样),我们将e加1,我假设现在变为21?它是错误的,因此整个AND语句都是错误的.
在这一点上,我们回去做OR声明吗?既然AND之后呢?现在不应该抽到22?因为它是一个OR语句,它应该是TRUE或FALSE,它应该是TRUE,并且"Hi"应该出现在屏幕上.但事实并非如此.
奇怪的是,当代码完成时,e的值为22.22是IF语句为真所需的值,但内部条件没有运行.
我非常困惑.