Here is the code segments
Can you explain why outputs are varying
1)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t && ((i++) == 0));
b = (f && ((i+=2) > 0));
System.out.println(i);
}
}
output in this case is 1
2)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t & ((i++) == 0));
b = (f & ((i+=2) > 0));
System.out.println(i);
}
}
output in this case is 3
3)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t || ((i++) == 0));
b = (f || ((i+=2) > 0));
System.out.println(i);
}
}
output in this case is 2
4)
public static ShortCkt {
public static void main(String args[]) {
int i = 0;
boolean t = true;
boolean f = false, b;
b = (t | ((i++) == 0));
b = (f | ((i+=2) > 0));
System.out.println(i);
}
}
output in this case is 3
Just as in C/C++
&&is evaluated “lazily” while&is not.If
ais false thena && bwill return false without even evaluatingb.Same goes for
a || b: If the first operand,ais true, the whole expression is true and the second operand,bis never evaluated. Fora | bhowever, bothaandbwill be evaluated.This has consequences if the operand that’s not being evaluated when using
&&(or||) has side effects, as in your examples.Side note: Few java-programmers know that
^(xor) works for booleans as well. (A^^version does not exist simply because it would be redundant.)