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

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

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

谢谢

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

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

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

这称为短路评估 ,在Java文档中也有提及。

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


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

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

如果之后还有elseelse将仅适用于它所附加的if语句。

为了certificate这个问题:

 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人,他们不是人。

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

从javadoc开始:

条件运算符

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

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

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

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

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

 if length greater than two then access third element 

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

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