好的,我测试了这段代码,我发现没有抛出任何异常。
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或其他语言编写的呢?
谢谢
发布于 2013-05-17 17:48:17
对于语言(包括Java和Python )来说,计算逻辑AND
的第一个参数并在第一个参数为false
的情况下完成语句的计算是很常见的。这是因为:
来自The Order of Evaluation of Logic Operators,
当Java计算表达式d=b && c;时,它首先检查b是否为真。这里b为false,因此无论c是否为true,b && c都必须为false,所以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
的人类他们不是人类。
发布于 2013-05-17 17:45:54
是。如果第一个条件不满足,则不对其余条件求值。这被称为短路。有关更多详细信息,请参阅here。请注意,这并不是Java所特有的,许多其他语言也会这样做。
发布于 2013-05-17 17:48:17
直接从javadoc中:
条件运算符
&&和||运算符对两个布尔表达式执行条件and和条件OR运算。这些运算符表现出“短路”行为,这意味着只有在需要时才会计算第二个操作数。
&&条件-AND ||条件-OR
https://stackoverflow.com/questions/16606021
复制相似问题