Java是否在知道布尔结果后评估剩余条件?

P. *_*ers 29 java

也就是说,如果我有一个评估多个条件的语句,比如说'或'这样的语句.

if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下isVeryLikely(),在运行时返回true,将isSomewhatLikely()isHardlyLikely()执行?如果不是方法而是静态布尔值呢?

Chr*_*ung 46

||&&运营商短路.

true || willNeverExecute();
false && willNeverExecute();
Run Code Online (Sandbox Code Playgroud)


Ver*_*ern 13

您需要注意的第一件事是Java条件语句只能采用布尔值,与其他语言(如C/C++)不同,其中任何非零值都将计算为true.

话虽如此,有两种类型的运算符,第一种称为shor-circuit类型:

&& and ||
Run Code Online (Sandbox Code Playgroud)

而另一种是非短路类型:

& and |
Run Code Online (Sandbox Code Playgroud)

对于短路类型,一旦找到逻辑输出作为表达式的答案,将转储语句的其余部分.对于非短路类型,他们将继续评估所有条件.

考虑到这一点,你有什么:

if(isVeryLikely() || isSomewhatLikely() || isHardlyLikely())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

Java将:

  1. 首先检查isVeryLikely()是否返回true.如果是,那么它将不会继续下去.
  2. 如果isVeryLikely()返回false,则调用isSomewhatLikely()以查看它是否返回true.如果为真,则不进行其他评估.如果为false,请转到3.
  3. isHardlyLikely()被调用.如果为true,则整个表达式为true,否则为false,整个表达式为false.

您要问的整个概念是"Java如何评估逻辑表达式".好问题 :)

希望能帮助到你!干杯!