一个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){ ... } }
如果之后还有else
。 else
将仅适用于它所附加的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运算符,则第二个条件将被解除。