此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