int it=9, at=9;
if(it>4 || ++at>10 && it>0)
{
System.out.print("stuff");
}
System.out.print(at);
prints out stuff9 and I want to know why as I thought ++at>10 && it>0
would be evaluated first and thus make at = 10.
Operator precedence only controls argument grouping; it has no effect on execution order. In almost all cases, the rules of Java say that statements are executed from left to right. The precedence of ||
and &&
causes the if
control expression to be evaluated as
it>4 || (++at>10 && it>0)
but the higher precedence of &&
does not mean that the &&
gets evaluated first. Instead,
it>4
is evaluated, and since it's true, the short-circuit behavior of ||
means the right-hand side isn't evaluated at all.
Your compound expression is equivalent to
if(it>4 || (++at>10 && it>0))
due to Java operator precedence rules. The operands of ||
are evaluated left to right, so it>4
is evaluated first, which is true
, so the rest of it (the entire &&
subexpression) doesn't need to be evaluated at all (and so at
does not change).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With