一个if语句中的两个条件是第二个,如果第一个是假的吗?

时间:2013-05-17 09:44:42

标签: java if-statement conditional-statements

好的,所以我测试了这段代码,发现没有任何异常被抛出。

public static void main(String[] args) {
    int[] list = {1,2};
    if (list.length>2 && list[3] == 2){
        System.out.println(list[1]);
    }
}

这里的陈述是

if (list.length>2 && list[3] == 2)

意味着如果第一个条件为假,我们甚至不必检查第二个条件?

或等于

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}

而且,如果它是用C或python或其他语言编写的呢?

由于

7 个答案:

答案 0 :(得分:46)

如果第一个参数是AND,语言(Java和Python就是其中之一)通常会评估逻辑false的第一个参数并完成对语句的评估。这是因为:

来自The Order of Evaluation of Logic Operators

  

当Java评估表达式d = b&& c;,它首先检查b是否为真。这里b是假的,所以b&&无论c是否为真,c都必须为false,因此Java不会检查c的值。

这称为short-circuit evaluation,在Java docs中也有提及。

通常会看到list.count > 0 && list[0] == "Something"检查列表元素(如果存在)。


值得一提的是,if (list.length>2 && list[3] == 2) 等于第二种情况

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}

如果之后有elseelse仅适用于其附加的if语句。

为了证明这个问题:

if (x.kind.equals("Human")) {
    if (x.name.equals("Jordan")) {
        System.out.println("Hello Jordan!");
    }
} else {
    System.out.println("You are not a human!");
}

将按预期工作,但

if (x.kind.equals("Human") && x.name.equals("Jordan")) {
    System.out.println("Hello Jordan!");
} else {
    System.out.println("You are not a human!");
}

还会告诉任何不是Jordan他们不是人的人。

答案 1 :(得分:16)

是。如果不满足第一个条件,则不评估余数。这称为短路。有关详细信息,请参阅here。请注意,这不是Java特有的,许多其他语言都会这样做。

答案 2 :(得分:7)

从javadoc开始:

  

条件运算符

     

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

     

&安培;&安培;条件-AND ||有条件-OR

答案 3 :(得分:4)

是的,这两种用法在语义上是等价的...... 也就是说,除非长度> 2,然后是允许访问多于第二个元素的代码。

在第一种情况下,重要的是&&运算符,将其视为: 如果第一个条件为真应用第二个条件。

后续条件也有一个隐含的“then”子句

if length greater than two
 then access third element

答案 4 :(得分:3)

如果第一个条件是假的,那么就不会检查第二个条件是什么&& F = F. 再次,它取决于你正在做的位操作。 就像在OR(||)的情况下,如果第一个条件为真(T),它不会检查第二个条件为什么|| T = T但是如果它是假的(F)那么它肯定会检查第二个

答案 5 :(得分:3)

您已在IF语句中指定两个条件都应为true,以便执行System.out.println。因此,如果第一个条件本身失败,则不检查第二个条件(这是AND运算符)。但是,如果在If语句中指定了OR运算符,则第二个条件将被解除。

答案 6 :(得分:0)

它不会读取完整的表达式,因为即使在表达式的完整计算之前结果也很清楚,并返回结果