When evaluating an expression, Java evaluates any subexpressions inside parentheses first. When an expression does not have parentheses, certain operators are applied before others. The order in which these operators are applied follow Java's "order of operations" or "operator precedence". This order is as follows (with the things at the beginning of the list happening first):
1. var++, var-- (post-increment and post-decrement) 2. +, - (Unary plus and minus), ++var, --var (pre-increment and pre-decrement) 3. (type) casting 4. ! (Not) 5. *, /, % (Multiplication, division, and remainder) 6. +, - (Binary addition and subtraction) 7. <,<=, >, >= (Comparison Tests) 8. ==, != (Equality Tests) 9. ^ (Exclusive OR) 10. && (Conditional AND) Short-circuit AND 11. || (Conditional OR) Short-circuit OR 12. =, +=, -=, *=, /=, %= (Assignment)
When two operators with the same precedence are evaluated, the associativity of the operators determines the order of evaluation.
All binary operators except the assignment operators are "left-associative".
Example of Left-Associative Evaluation
n = a - b + c - d; | |
n = ((a - b) + c ) - d); |
Example of Right-Associative Evaluation
n = a += b = 5; | |
n = (a += (b = 5)); |
If you are not sure what gets evaluated first, or just as a courtesy to readers of your code, ALWAYS use parentheses to make the expression evaluated in the order you desire.
Example
double value1 = (i++) + ((x*4) % n); //easy to read double value2 = i++ + x * 4 % n; //hard to read - don't do this