此Java代码中的短路逻辑有什么问题?

为什么func3没有在下面的程序中执行?在func1之后,不需要对func2进行评估,但是对于func3,不是吗?

if (func1() || func2() && func3()) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }
}

public static boolean func1() {
    System.out.println("func1");
    return true;
}

public static boolean func2() {
    System.out.println("func2");
    return false;
}

public static boolean func3() {
    System.out.println("func3");
    return false;
}
最佳答案
您正在使用短路或.如果第一个参数为true,则整个表达式为true.

如果添加编译器使用的隐式括号可能会有所帮助

编辑:正如克里斯·杰斯特·杨(Chris Jester-Young)所说,这实际上是因为逻辑运算符必须从左到右的关联性:

if (func1() || (func2() && func3()))

func1返回之后,它变为:

if (true || (func2() && func3()))

评估短路或后,它变为:

if (true)

转载注明原文:此Java代码中的短路逻辑有什么问题? - 代码日志