关于java:if语句何时完成检查其条件?

When does an if statement finish checking its conditions?

本问题已经有最佳答案,请猛点这里访问。

当if语句包含两个(或多个)条件,而第一个条件失败时,if语句是检查第二个条件还是在代码中继续?

以下是两个例子:

1
2
3
4
5
int x = 1, y = 2;
if(x == 0 && y == 2)
    System.out.println("Nothing");
if(x == 1 || y == 0)
    System.out.println("Something");

在第一个if语句中,条件应该返回false,但y == 2是否经过测试?在第二个例子中,条件应该返回true,但是y == 0是否经过测试?或者在这两种情况下,在第一个条件之后,代码跳过第二个条件并在代码中继续?

事先谢谢。


&&||是短路操作器,这意味着如果不需要,就不会评估右侧比较。

因此,我们有以下内容:

  • 使用&&时,如果左侧比较是false时,则不评估右侧比较。

  • 使用||时,如果左侧比较是true时,则不评估右侧比较。

然而,当使用&|作为逻辑运算符时,总是要对双方进行评估。


&&运算符中,两个比较都必须返回true以通过if条件,因此,如果第一个结果是false结果将是false无论第二个结果是什么。

||算子中,如果比较中的任何一个是true,那么无论第二个结果是什么,if结果都将是true

所以,

在and运算符中,如果第一个比较是true,它将测试第二个比较,并且需要测试第二个比较以确定条件结果。

在OR运算符中,如果第一个比较是false,它将测试第二个比较;如果第二个比较是true,它将需要测试第二个比较,因为它可能改变条件结果。


正如@casio所述,第二个操作数不会被计算。

例如,当需要检查对象是否存在并验证其属性时,短路评估非常方便。

1
if (X !=null && X.length !=null) ...