小编Mat*_*ins的帖子

短路评估和前缀增量运算符的顺序

在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语句为真所需的值,但内部条件没有运行.

我非常困惑.

java logic boolean

1
推荐指数
1
解决办法
133
查看次数

标签 统计

boolean ×1

java ×1

logic ×1