Possible Duplicate:
Difference in & and &&
I’ve read several tutorials and answer regarding short circuit operations in java and I’m still not quite understanding the difference in how java handles short circuiting for a double vertical pipe vs a double ampersand. For instance …
Why does the logical AND short circuit evaluation fail?
Citing the JSL 15.23. Conditional-And Operator &&
The conditional-and operator && is like & (§15.22.2), but evaluates its right-hand operand only if the value of its left-hand operand is true.
public static void main( String... args ) {
int a = 1;
int b = 2;
// Okay. Prints
if( a == 1 | b == 3 ) {
System.out.println( "Comparison via |" + "\na is " + a + "\nb is " + b );
}
// Okay. Prints
if( a == 1 || b == 3 ) {
System.out.println( "Comparison via ||" + "\na is " + a + "\nb is " + b );
}
// Okay. Does not print
if( a == 1 & b == 3 ) {
System.out.println( "Comparison via &" + "\na is " + a + "\nb is " + b );
}
// I don't understand. Shouldn't the Short Circuit succeed since the left side of the equation equals 1?
if( a == 1 && b == 3 ) {
System.out.println( "Comparison via &&" + "\na is " + a + "\nb is " + b );
}
}
No, absolutely not. The point of
&&is that the result is onlytrueif the left and the right operands aretrue; the short-circuiting means that the right operand isn’t evaluated if the left operand isfalse, because the answer is known at that point.You should read sections 15.23 and 15.24 of the JLS for more details: