如果第一条语句错误,则第二条语句中的两个条件成立?
好的,所以我测试了这段代码,发现没有任何异常抛出。如果第一条语句错误,则第二条语句中的两个条件成立?
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
常见。这是因为:
The Order of Evaluation of Logic Operators从,
当爪哇计算表达式d = B & &Ç;,它首先检查是否b为真。这里b为假,所以B & & c必须是假的,无论C是否是或不是真的,所以Java不打扰检查c的值。
这被称为short-circuit evaluation,在Java docs也被称为。
这是经常可以看到list.count > 0 && list[0] == "Something"
检查列表元素,如果它存在。
还值得一提的是,if (list.length>2 && list[3] == 2)
是不等于第二种情况
if (list.length>2){
if (list[3] == 2){
...
}
}
,如果有一个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!");
}
会达到预期效果,但
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,那么代码是否允许访问多于第二个元素。
在第一种情况下,重要的是在&&
运营商,认为它是: 如果第一个条件为真然后应用第二个条件。
随后的条件也有一个隐式 “然后” 子句
if length greater than two
then access third element
右键从的Javadoc:
的条件运算符
的& &和||操作符对两个布尔表达式执行条件AND和条件OR操作。这些运算符展示 “短路”行为,这意味着第二个操作数是 仅在需要时进行评估。
& & Conditional-AND ||有条件-OR
如果第一个条件是假,那么它不会检查第二个条件是什么& &˚F= F 再次这取决于它咬你在做明智的操作。 像OR(||)的情况下,如果第一个条件为真(T)它不会检查第二个条件|| T = t,但如果它的假(F),那么它肯定会检查第二
你在你的IF语句已指定了要执行的的System.out.println两个条件应该是真实的。所以如果第一个条件本身失败,第二个条件不会被检查(这是AND运算符)。但是如果您在If语句中指定了OR运算符,则会触发第二个条件。
你的两种方式是相同的 –
Java遵循http://en.wikipedia.org/wiki/Short-circuit_evaluation(短路评估)来验证该表达式 – Vasu
短路评估让您可以评估长期合法的条件因为第一个条件是合法的。你会经常看到这样'如果代码(字符串!= NULL && string.length减> 5)' –