위에서 아래로 갈수록 우선순위가 낮아진다.
| 순위 | 연산자 종류 | 연산자 | 연산 방향 |
|---|---|---|---|
| 1 | 증감, 부호, 비트 반전, 논리 부정 | ++, --, +, -, ~, ! |
← |
| 2 | 산술 (곱셈 계열) | *, /, % |
→ |
| 3 | 산술 (덧셈 계열) | +, - |
→ |
| 4 | 쉬프트 | <<, >>, >>> |
→ |
| 5 | 비교 | <, >, <=, >=, instanceof |
→ |
| 6 | 동등 비교 | ==, != |
→ |
| 7 | 비트 논리 | &, ^, \| |
→ |
| 8 | 논리 (AND) | && |
→ |
| 9 | 논리 (OR) | \|\| |
→ |
| 10 | 삼항 연산 | ? : |
→ |
| 11 | 대입 | =, +=, -=, *=, 등 |
← |
계산을 먼저 하고, 그 결과를 비교한 뒤, 논리적으로 묶고, 마지막에 변수에 담는다.
result = a + b > c && d < e;
a + b 산술 연산이 1순위> 와 < 비교 연산이 2순위&& 논리 연산이 3순위= 대입 연산이 마지막피연산자 개수가 적은 연산자가 대체로 우선순위가 높다. (++x가 x + y보다 빠름)
우선순위가 같은 연산자들끼리 있을 때의 규칙
→)으로 진행 (예: 100 / 5 * 2)←)으로 진행 (예: a = b = c = 5)모든 우선순위를 외우는 것보다 우선 계산되어야 하는 부분을 괄호()로 묶는 것이 좋은 방법이다.
// 가독성이 떨어지고 실수의 위험이 있는 코드
boolean result = a + b < c && d > e || f == g;
// 괄호를 사용하여 의도를 명확히 한 코드
boolean result = (((a + b) < c) && (d > e)) || (f == g);
()를 사용하여 가독성과 정확성을 확보하자.