Java Operator Precedence and Associativity
In Java, operator precedence decides which part of an expression gets evaluated first. If an expression has multiple operators, Java follows a predefined order to solve it. Associativity determines the direction in which operators of the same precedence level are executed.
Java Operator Precedence
The operator precedence determines the grouping of terms in an expression. This affects how an expression is evaluated. Certain operators have higher precedence than others; for example, the multiplication operator has higher precedence than the addition operator
For example, x = 7 + 3 * 2; here, x is assigned 13, not 20 because operator * has higher precedence than +, so it first gets multiplied with 3 * 2 and then adds into 7.
Java Operator Associativity
When operators of the same precedence appear together, associativity defines the direction of evaluation
- Left to Right Associativity: Operators like
+,-,*,/,&&, and||are evaluated from left to right. - Right to Left Associativity: Operators like
=(assignment) and?:(ternary operator) are evaluated from right to left.
Operator Precedence and Associativity Table
Here, operators with the highest precedence appear at the top of the table, and those with the lowest appear at the bottom. Within an expression, higher precedence operators will be evaluated first.
| Precedence | Category | Operator | Associativity |
|---|---|---|---|
| 1 | Postfix | () [] . (dot operator) | Left to right |
| 2 | Unary | ++ -- + - ~ ! | Right to left |
| 3 | Multiplicative | * / % | Left to right |
| 4 | Additive | + - | Left to right |
| 5 | Shift | << >> >>> | Left to right |
| 6 | Relational | < <= > >= instanceof | Left to right |
| 7 | Equality | == != | Left to right |
| 8 | Bitwise AND | & | Left to right |
| 9 | Bitwise XOR | ^ | Left to right |
| 10 | Bitwise OR | | | Left to right |
| 11 | Logical AND | && | Left to right |
| 12 | Logical OR | || | Left to right |
| 13 | Conditional | ?: | Right to left |
| 14 | Assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= | Right to left |
Example of Operator Precedence and Associativity
Example 1: Operator Precedence
The following Java program demonstrates how operator precedence affects evaluation:
public class OperatorPrecedenceExample {
public static void main(String[] args) {
int result = 10 + 5 * 2 - 8 / 4; // Operator precedence applied here
System.out.println("Result: " + result);
}
}
When the above code is compiled and executed, it produces the following result −
Result: 18
Step-by-Step Evaluation
5 * 2 = 108 / 4 = 2- Now the expression simplifies to:
10 + 10 - 2 10 + 10 = 2020 - 2 = 18
Example 2: Operator Associativity
The following Java program demonstrates the right-to-left associativity of the assignment operator:
public class AssociativityExample {
public static void main(String[] args) {
int a, b, c;
a = b = c = 2; // Assignment operator (=) is right-to-left associative
System.out.println("a: " + a + ", b: " + b + ", c: " + c);
}
}
When the above code is compiled and executed, it produces the following result −
a: 2, b: 2, c: 2
Step-by-Step Evaluation
c = 2(First,cgets the value2)b = c(Thenbgets the value ofc, i.e.,b = 2)a = b(Thenagets the value ofb, i.e.,a = 2)