【问题标题】:Will Java continue with condition if it is already proven to be false? [duplicate]如果已经证明它是错误的,Java 会继续使用条件吗? [复制]
【发布时间】:2014-12-01 20:12:54
【问题描述】:

假设条件看起来像这样:

    if (false && true)
      //Code

它会在达到真之前脱离条件吗,因为假和 && 永远不会为真?

另外,如果你有这样的代码:

    boolean dividesToTwo (int operand1, int operand2) {
      if ((operand2 != 0) && operand1 / operand2 == 2)
        return true;
      return false;
    }

它会按预期成功运行,还是会因为被零除而出错? (如果第二个操作数为零)

【问题讨论】:

  • &&条件运算符,并且按照规范要求具有短路语义。所以,是的
  • 这已经被问过了。看看这个:stackoverflow.com/questions/7199666/…
  • 你试过了吗?

标签: java conditional-statements


【解决方案1】:

是的,如果 (false && true) 被评估,则在看到 false 时,将停止从那里评估条件(即在它达到 true 之前)

但是,如果是 OR (||) 操作,则必须先检查第二部分,然后才能确定它是真还是假。

对于您的第二个问题,它会按预期运行。不会发生除零。

【讨论】:

    【解决方案2】:
      if ((operand2 != 0) && operand1 / operand2 == 2)
    

    这意味着如果operand2!=0 则由于&& 的行为而仅发生除法。如果前半部分为真,则仅执行后半部分。如果前半部分是false,则后半部分不会执行。

    Read how && behaves

    只有在第一个参数不足以确定表达式的值时才执行或评估第二个参数:

    【讨论】:

      【解决方案3】:

      关于问题的第一部分,请参阅this answer。这称为短路评估:

      • 当使用&& 时,仅当第一部分为真时才评估第二部分
      • 使用|| 时,仅当第一部分为假时才评估第二部分

      关于问题的第二部分:

      是的,这将按预期工作!如果 operand2 为零,则取消评估并且不会发生除以零!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多