如果第一个条件为假,则一个 if 语句中的两个条件是否重要?

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

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或其他一些语言编写的呢?

谢谢


答案 1

语言(Java和Python是其中之一)通常评估逻辑的第一个参数,如果第一个参数是.这是因为:ANDfalse

摘自《逻辑算子的评估顺序》

当 Java 计算表达式 d = b && c; 时,它首先检查 b 是否为真。这里的 b 是 false,所以无论 c 是假还是假,b && c 都必须是 false,所以 Java 不会费心检查 c 的值。

这被称为短路评估,在 Java 文档中也提到过。

检查列表元素(如果存在)是很常见的。list.count > 0 && list[0] == "Something"


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

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

如果有之后。将仅适用于它所附的语句。elseelseif

为了证明这个陷阱:

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


答案 2

是的。如果不满足第一个条件,则不会计算其余条件。这称为短路。有关更多详细信息,请参阅此处。请注意,这并不是Java所特有的,许多其他语言也会这样做。


推荐