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

alb*_*hin 33 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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

声明在这里

if (list.length>2 && list[3] == 2)
Run Code Online (Sandbox Code Playgroud)

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

或者等于

if (list.length>2){
    if (list[3] == 2){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Ell*_*lle 51

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

逻辑运算符的评价顺序来看,

当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){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有else事后.该else条款仅适用于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!");
}
Run Code Online (Sandbox Code Playgroud)

会按预期工作,但是

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

也会告诉任何Jordan不是人类的人.

  • 最后一块很公平。只有`Jordan`s可以统治世界。 (2认同)

Bri*_*new 17

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


Jun*_*san 9

从javadoc开始:

条件运算符

&&和|| 运算符对两个布尔表达式执行条件AND和条件OR运算.这些运算符表现出"短路"行为,这意味着仅在需要时才评估第二个操作数.

&& Conditional-AND || 有条件-OR