在已知布尔结果后,Java是否计算剩余条件?
也就是说,如果我有一个计算多个条件的语句,比如像这样的'or'语句在已知布尔结果后,Java是否计算剩余条件?,java,Java,也就是说,如果我有一个计算多个条件的语句,比如像这样的'or'语句 if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely()) { ... } 如果isVeryLikely()在运行时返回true,那么isSomewhatLikely()和isHardlyLikely()会执行吗?如果不是方法,而是静态布尔值呢?和&运算符短路 true || willNeverExecute(); false && will
if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely())
{
...
}
如果
isVeryLikely()
在运行时返回true,那么isSomewhatLikely()
和isHardlyLikely()
会执行吗?如果不是方法,而是静态布尔值呢?和&
运算符短路
true || willNeverExecute();
false && willNeverExecute();
不,java使用
|
和&&
对表达式进行短路求值。有关详细信息,请参阅。因为| |是短路的,所以语句在遇到第一个true条件时将立即求值为true,而不管操作数是否是静态的
简言之,如果第一个函数返回true,则不会对其他两个函数求值。您需要注意的第一件事是,Java条件语句只能采用布尔值,这与其他语言(如C/C++)不同,C/C++中的任何非零值都将求值为true 也就是说,有两种类型的操作员,第一种被称为shor电路类型:
&& and ||
& and |
另一种是非短路类型:
&& and ||
& and |
对于短路类型,一旦可以找到逻辑输出作为表达式的答案,语句的其余部分将被转储。对于非短路类型,他们将继续评估所有条件
考虑到这一点,您所拥有的:
if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely())
{
...
}
Java将:
希望有帮助!干杯 简单的回答是,它将进行评估,直到有足够的证据得出是否为T/F 有一种叫做布尔短路。本质上,它只会尝试和评估它所需要的(如果使用&&或| |运算符)和leave。您可以通过以下几种方式利用这一优势:
(a() || b())
无论问题中指定的布尔表达式是静态布尔值,还是返回布尔值的方法,在这两种情况下-表达式计算将从左侧开始,条件将逐个计算。给出值true的第一个条件将使评估短路。它将直接给出结果为真,其余条件不进行评估。这就是| |(OR)在Java中使用短路评估概念的工作方式
如果您想了解更多关于短路的一般信息,可以参考我在博客上写的一篇文章-作为Kotlin用户的更新,您可以使用Kotlin std库中的'or'运算符来检查If语句中的所有表达式,而不执行短路 在初始问题中给出的表达式中,Kotlin中的代码应为:
if(isVeryLikely() or isSomewhatLikely() or isHardlyLikely()) {
...
}
并非所有的“布尔表达式”;您可以将&
和|
与布尔一起使用,它们不会短路。规范中的声明: