Groovy Operators

Control Statements

Groovy File Handling

Groovy Error & Exceptions

Groovy Multithreading

Groovy Synchronization

Groovy - Operator Precedence and Associativity



In Groovy, operator precedence decides which part of an expression gets evaluated first. If an expression has multiple operators, Groovy follows a predefined order to solve it. Associativity determines the direction in which operators of the same precedence level are executed.

Groovy 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.

Groovy 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 - Operator Precedence

The following Groovy program demonstrates how operator precedence affects evaluation:

Example.groovy

class Example {
   static void main(String[] args) {
      int result = 10 + 5 * 2 - 8 / 4;  // Operator precedence applied here
      println("Result: " + result);
   }
}

Output

When the above code is compiled and executed, it produces the following result −

Result: 18

Step-by-Step Evaluation

  • 5 * 2 = 10
  • 8 / 4 = 2
  • Now the expression simplifies to: 10 + 10 - 2
  • 10 + 10 = 20
  • 20 - 2 = 18

Example - Operator Associativity

The following Groovy program demonstrates the right-to-left associativity of the assignment operator:

class Example {
   static void main(String[] args) {
      int a, b, c;
      a = b = c = 2;  // Assignment operator (=) is right-to-left associative

      println("a: " + a + ", b: " + b + ", c: " + c);
   }
}

Output

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, c gets the value 2)
  • b = c (Then b gets the value of c, i.e., b = 2)
  • a = b (Then a gets the value of b, i.e., a = 2)
Advertisements