编程语言
首页 > 编程语言> > 此Java代码中的短路逻辑有什么问题?

此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,logical-operators
来源: https://codeday.me/bug/20191010/1887748.html