
- Groovy Tutorial
- Groovy - Home
- Groovy - Overview
- Groovy - Environment
- Groovy - Basic Syntax
- Groovy - Data Types
- Groovy - Variables
- Groovy - Optionals
- Groovy - Numbers
- Groovy - Strings
- Groovy - Ranges
- Groovy - Lists
- Groovy - Maps
- Groovy - Dates & Times
Groovy Operators
- Groovy - Operators
- Groovy - Arithmetic Operators
- Groovy - Assignment Operators
- Groovy - Relational Operators
- Groovy - Logical Operators
- Groovy - Bitwise Operators
- Groovy - Spaceship Operator
- Groovy - in Operator
- Groovy - Elvis Operator
- Groovy - Safe Navigation Operator
- Groovy Operator Precedence & Associativity
Control Statements
- Groovy - Decision Making
- Groovy - If Else Statement
- Groovy - Switch Statement
- Groovy - Loops
- Groovy - For Loop
- Groovy - For-in Loop
- Groovy - While Loop
- Groovy - Do While Loop
- Groovy - Break Statement
- Groovy - Continue Statement
Groovy File Handling
- Groovy - File I/O
- Java - Create a File
- Java - Write to File
- Java - Append to File
- Java - Read Files
- Java - Delete Files
- Java - File Properties
- Java - File Existence and Type
- Java - File Size
- Java - File Permissions
- Java - Directories
- Java - Listing Directories
- Java - Filtering Files/Directories
- Java - Deleting Directories
- Java - Renaming Files/Directories
Groovy Error & Exceptions
- Groovy - Exception Handling
- Groovy - try-catch Block
- Groovy - try-with-resources
- Groovy - Multi-catch Block
- Groovy - Nested try Block
- Groovy - Finally Block
- Groovy - throw Exception
- Groovy - Exception Propagation
- Groovy - Built-in Exceptions
- Groovy - Custom Exception
Groovy Multithreading
- groovy - Multithreading
- groovy - Thread Life Cycle
- groovy - Creating a Thread
- groovy - Starting a Thread
- groovy - Joining Threads
- groovy - Naming Thread
- groovy - Thread Scheduler
- groovy - Thread Pools
- groovy - Main Thread
- groovy - Thread Priority
- groovy - Daemon Threads
- groovy - Shutdown Hook
Groovy Synchronization
- groovy - Synchronization
- groovy - Block Synchronization
- groovy - Static Synchronization
- groovy - Inter-thread Communication
- groovy - Thread Deadlock
- groovy - Interrupting a Thread
- groovy - Thread Control
- groovy - Reentrant Monitor
- Groovy - Methods
- Groovy - Methods
- Groovy - Optional parenthesis
- Groovy - Named Arguments
- Groovy - Closures as Arguments
- Groovy - Method Overloading
- Groovy - Method Scope and Visibility
- Groovy - isCase Method
- Groovy - Implicit Return
- Groovy - Variable Arguments
- Groovy - Regular Expressions
- Groovy - Regular Expressions
- Groovy - Defining Regular Expressions
- Groovy - Matcher Object
- Groovy - Regex Tasks
- Groovy - XML
- Groovy - XML
- Groovy - Parsing XML
- Groovy - Creating XML
- Groovy - Modifying XML
- Groovy - Querying XML
- Groovy - Simplified Notation
- Groovy - Closure based Querying
- Groovy - Closure based Creation
- Groovy - JSON
- Groovy - JSON
- Groovy - Parsing JSON
- Groovy - Creating JSON using JsonOutput
- Groovy - Creating JSON using JsonBuilder
- Groovy - Modifying JSON
- Groovy - Error Handling
- Groovy - Handling JSON Arrays
- Groovy - JSON Array Operations
- Groovy - JSON Objects
- Groovy - JSON Object Operations
- Groovy - Generics
- Groovy - Generics
- Groovy - Declaring Generic Types
- Groovy - Bound Type Parameters
- Groovy - Wild Cards
- Groovy - Miscellaneous
- Groovy - Object Oriented
- Groovy - Closures
- Groovy - Annotations
- Groovy - JMX
- Groovy - DSLS
- Groovy - Database
- Groovy - Builders
- Groovy - Command Line
- Groovy - Unit Testing
- Groovy - Template Engines
- Groovy - Meta Object Programming
- Groovy Useful Resources
- Groovy - Quick Guide
- Groovy - Useful Resources
- Groovy - Discussion
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 value2
) -
b = c
(Thenb
gets the value ofc
, i.e.,b = 2
) -
a = b
(Thena
gets the value ofb
, i.e.,a = 2
)