Java增量逻辑题(条件语句中的增量)

Java increment logical problem (increment in conditional statements)

我收到了给我的评估,但这两个问题一直困扰着我。这两个代码看起来很相似,但是根据增量给出不同的输出

代码#1:

package com.company;
class Main {
public static void main(String [] args) {
                boolean x = true;
                boolean y = false;
                short z = 42;

                if((z++ == 42) && (y = true))
                    z++;
                if((x = false) || (++z == 45))
                    z++;
                System.out.println("z = " + z);
                }
}

这段代码看起来不错,它增加了它应该增加的值并将该值返回给 "z" 因此输出

输出:

z = 46

Process finished with exit code 0

但是第二个代码似乎不同,因为它不保存增量值

代码#2: 包裹 com.company;

public class 测试2

{
    public static void main(String [] args) {
        boolean x = true;
        boolean y = false;
        short z = 42;
        if((x == true) && (y = true))
            z++;
        if((y == true) || (++z == 44))
            z++;
        System.out.println("z = " + z);
    }
}

这个不会像第一个代码那样保存第二个if条件语句的增量

输出:

z = 44

Process finished with exit code 0

我是不是漏掉了什么重要的东西?

这是因为逻辑或运算符(||短路:如果已知第一个条件为真,则第二个条件根本没有执行.

也就是说(++z == 44)中的z++没有被执行,所以最终结果是44而不是45。

如评论中所述,按位 OR 运算符(|)不会短路,因此始终执行两个语句。


像这样的代码可能会非常混乱。代码应该主要是可读的。切勿在条件内使用赋值。 b = false 很容易与 b == false 混淆。还要避免在其他操作中间使用增量运算符,仅作为独立表达式使用。