【问题标题】:When does an if statement finish checking its conditions? [duplicate]if 语句何时完成对其条件的检查? [复制]
【发布时间】:2016-09-03 10:57:35
【问题描述】:

当 if 语句包含两个(或多个)条件,而第一个条件失败时,if 语句是检查第二个条件还是继续在代码中?

这里有两个例子:

int x = 1, y = 2;
if(x == 0 && y == 2)
    System.out.println("Nothing");
if(x == 1 || y == 0)
    System.out.println("Something");

在第一个 if 语句中,条件应该返回 false,但 y == 2 是否经过测试?在第二个示例中,条件应该返回 true,但 y == 0 是否经过测试?或者在这两种情况下,在第一个条件之后,代码跳过第二个条件并继续在代码中?

提前致谢。

【问题讨论】:

  • 了解短路运算符。

标签: java if-statement conditional


【解决方案1】:

&&||短路运算符,这意味着如果没有必要,将不会计算右侧的比较。

所以,我们有以下内容:

  • 使用&&时,如果左侧比较为false,则不计算右侧比较。

  • 使用||时,如果左侧比较为true,则不计算右侧比较。


但是,当使用&| 作为逻辑运算符时,总是会计算两边。

【讨论】:

    【解决方案2】:

    && 运算符中,两个比较都必须返回true 以传递if 条件,因此如果第一个是false,则无论第二个结果是什么,结果都将是false

    || 运算符中,如果任何比较是true,则if 结果将是true,无论第二个结果是什么。

    所以,

    在AND运算符中,如果第一个是true,它将测试第二个比较,并且需要测试第二个比较以确定条件结果。

    在 OR 运算符中,如果第一个比较是 false,它将测试第二个比较,它需要测试第二个比较,因为如果它是 true,它可能会改变条件结果。

    【讨论】:

      【解决方案3】:

      就像 @Cassio 所说,第二个操作数不会被计算。

      短路评估非常方便,例如,当您需要检查对象是否存在并验证其属性时。

      if (X !=null && X.length !=null) ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多