It is common for languages (Java and Python are among them) to evaluate the first argument of a logical AND
and finish evaluation of the statement if the first argument is false
. This is because:
From The Order of Evaluation of Logic Operators,
When Java evaluates the expression d = b && c;, it first checks whether b is true. Here b is false, so b && c must be false regardless of whether c is or is not true, so Java doesn't bother checking the value of c.
This is known as short-circuit evaluation, and is also referred to in the Java docs.
It is common to see list.count > 0 && list[0] == "Something"
to check a list element, if it exists.
It is also worth mentioning that if (list.length>2 && list[3] == 2)
is not equal to the second case
if (list.length>2){
if (list[3] == 2){
...
}
}
if there is an else
afterwards. The else
will apply only to the if
statement to which it is attached.
To demonstrate this gotcha:
if (x.kind.equals("Human")) {
if (x.name.equals("Jordan")) {
System.out.println("Hello Jordan!");
}
} else {
System.out.println("You are not a human!");
}
will work as expected, but
if (x.kind.equals("Human") && x.name.equals("Jordan")) {
System.out.println("Hello Jordan!");
} else {
System.out.println("You are not a human!");
}
will also tell any Human who isn't Jordan
they are not human.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…