【问题标题】:if the first condition fails then the second condition will be examine -java [duplicate]如果第一个条件失败,那么第二个条件将是检查 -java [重复]
【发布时间】:2015-01-04 16:54:11
【问题描述】:

如果我在 java 中有一个 while 条件如下 while(j>=1 && i

【问题讨论】:

  • 不,执行将在第一个处停止!!

标签: java while-loop conditional-statements


【解决方案1】:

不,如果第一个条件返回 false,那么整个表达式会自动返回 false

Java 不会费心检查其他条件。

【讨论】:

    【解决方案2】:

    不会的。逻辑运算符&& 的快捷方式,如果左侧参数为假,将停止评估。

    请注意,Java 也有逻辑(除了按位&!)运算符&,这将不是快捷方式;因此,如果a 是在a & b 中评估为假的布尔表达式,那么b 被评估(但最终结果仍然为假)。

    【讨论】:

      【解决方案3】:

      在评估 && 时不,如果第一个条件为假,那么它不会评估第二个条件。

      同样在评估 ||如果第一个条件为真,则不计算第二个条件。

      【讨论】:

        【解决方案4】:
        (j>=1 && i<=7 && cond1 && cond2 && ... && condN) // will evaluate until the one condition fails
        (j>=1  & i<=7  & cond1  & cond2  & ...  & condN) // will evaluate all the conditions
        

        or

        (j>=1 || i<=7 || cond1 || cond2 || ... || condN) // will evaluate until the one condition is true
        (j>=1  | i<=7  | cond1  | cond2  | ...  | condN) // will evaluate all conditions
        

        示例:

        让我们使用这两种方法:

        public boolean isTrue(){
          System.out.println("true");
          return true;
        }
        
        public boolean isFalse(){
          System.out.println("false");
          return false;
        }
        

        所以,在第一种情况下:

        boolean cond = isFalse() && isTrue(); 
        

        输出是:

         false
        

        cond 的值为false

        在第二种情况下:

        boolean cond = isFalse() & isTrue(); 
        

        输出是:

         false
         true
        

        cond 的值为false

        【讨论】:

          【解决方案5】:

          这称为惰性求值。为了使其变得贪婪,请使用单个 & 逻辑运算符。在这种情况下,它也会评估第二个条件,即使第一个结果为假。

          【讨论】:

            【解决方案6】:

            我同意其他人的说法。答案是不。这称为短路评估。

            http://en.wikipedia.org/wiki/Short-circuit_evaluation

            【讨论】:

              猜你喜欢
              • 2020-06-26
              • 1970-01-01
              • 1970-01-01
              • 2014-04-26
              • 1970-01-01
              • 1970-01-01
              • 2018-04-18
              • 2021-06-30
              • 1970-01-01
              相关资源
              最近更新 更多