【问题标题】:If statement with && where the first condition needs to be true before testing the second [duplicate]带有 && 的 if 语句,其中第一个条件需要为真,然后再测试第二个 [重复]
【发布时间】:2013-04-08 14:59:01
【问题描述】:

对不起,如果这是重复的,但我什至想不出一种方法来搜索它。我不确定提出问题的术语,所以我将简单介绍一下我的问题。

根据我的测试,似乎 if 语句将在尝试转到数组 [10] 之前退出。我总是这样吗?意思是,如果我的 if 语句中有一个 && 并且左侧为假,它会在测试第二个之前总是退出吗?就此而言,它总是会先测试左边吗?

public static void main(String[] args) {
        boolean [] array = new boolean [10];
        Arrays.fill(array, true);
        int i = 10;
        if(i < array.length && array[i]){
            System.out.println("WhoHoo!");
        }
}

【问题讨论】:

标签: java if-statement conditional-statements


【解决方案1】:

如果我的 if 语句中有一个 && 并且左边是假的,会不会 总是在测试第二个之前退出?

是的。如果左侧为假,则无需检查右侧,因为当您有:

if(a && b) { ... }

如果!a,那么无论b 是什么,整个语句都被评估为false

如果a,那么它将继续评估下一个。

总结一下,永远记住this

...仅在需要时评估第二个操作数

【讨论】:

  • 我刚刚测试过,好像不是这样。你确定吗?我的编译器只是弄清楚我的意思并在幕后做一些魔术吗?
  • 我想补充一点:如果你仍然想评估b(例如,因为它是一个返回布尔值的方法)你需要输入(a &amp; b)。使用单个 & 符号不会使您的评估短路。
  • @Maroun 我试过 if((array.length
  • 犯了一个愚蠢的错误。更正代码:if((i
  • @Maroun c 在你描述的情况下不会被评估。
【解决方案2】:

如果第一个条件的计算结果为 true,它只会计算第二个条件。

评估从左边开始,当评估为假时,不会发生进一步的评估。

【讨论】:

    【解决方案3】:

    是的。如果左边为假,它将终止条件。因为如果你输入&amp;&amp;,那么所有条件都必须为真,如果任何条件变为假,则无需再进一步。所以它在条件得到false时终止。

    【讨论】:

      【解决方案4】:

      来自Java Tutorials上的运营商:

      && 和 ||运算符执行条件与和条件或 对两个布尔表达式的操作。这些运营商展示 “短路”行为,这意味着第二个操作数是 仅在需要时进行评估。

      【讨论】:

      • +1 用于提及 Java 教程和正确的术语
      猜你喜欢
      • 2013-05-12
      • 2015-12-24
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多