Unary postfix increment and decrement operators have more preceedence than relational operators according to precedence table, so why in a expression like this (x++ >=10) the relational operator evaluated first and then the variable is incremented?
The operator isn't evaluated first. The ordering is:
x++
) - the result is the original value of x
, then x
is incremented 10
) - the result is 10Here's code to demonstrate that:
public class Test {
static int x = 9;
public static void main(String[] args) {
boolean result = x++ >= showXAndReturn10();
System.out.println(result); // False
}
private static int showXAndReturn10() {
System.out.println(x); // 10
return 10;
}
}
That prints out 10
then false
, because by the time the RHS is evaluated x
has been incremented... but the >=
operator is still evaluating 9 >= 10
as the result of the expression x++
is the original value of x
, not the incremented one.
If you want the result after incrementing, use ++x
instead.
See more on this question at Stackoverflow