# Operator Precedence

Do you remember PEMDAS from school?

If you don’t, it’s the order of operations in math problems. Stuff in parenthesis happens first, followed by exponents, multiplication & division, and addition & subtraction. It’s why 3 + 7 * 2 is 17. 7 is multiplied by 2 first before the 3 is added.

How does this apply to computers? Read on…

## A few terms…

### Precedence Order

The first column below is the precedence of the operators. The higher the number, the higher the operator precedence. All else being equal, something on line 12 will happen before something on line 3.

For example, multiplication is on line 12 and addition is on line 11. That’s why 3 + 7 * 2 = 17, not 20.

### Associativity

If you’ve got multiple operations that are the same precedence order you then fall to associativity to see what happens next.

We’ll got with some simple math. 1 + 2 - 3. Addition and subtraction have the same precedence, so we’ll look at associativity, which is left to right in this case. So we add 1+2 and the add 3 to equal 6.

## Operator Precendence in Programming

Computer work in the same PEMDAS pattern for those priorities, but add several levels.

LevelOperatorsAssociativityDescription
16[]
.
()
left to rightaccess array elements
access object member
parentheses
15 ++
n/a unary post increment
unary post decrement
14 ++

+

!
~
right to left unary pre increment
unary pre decrement
unary plus
unary minus
logical not
unary bitwise
13 ()
new
right to left cast
object creation
12 * / % left to right multiplication / division
11 + –
+
left to right addition / subtraction
concatenation
10 << >> >>> left to right shift
9 < <= > >=
instanceof
n/a realtional comparisons
8 ==
!=
left to right equality
7 & left to right bitwise AND
6 ^ left to right bitwise XOR
5 | left to right bitwise OR
4 && left to right bitwise AND
3 || left to right bitwise OR
2 ?: right to left ternary
1 = += -=
*= /= %=
&= ^= |=
<<= >=>=
>>>=
right to left assignment

Interesting side note for you. This order of operator precedence is not specified in the language specification for Java, so you might see it a little different in different places. But it should be pretty close, and not different in ways that should change results.