08 연산자
연산의 우선순위
실제로 프로그래밍을 하게 되면 다양한 연산자들을 복합적으로 사용하게 된다. 이럴 때 연산의 선후 관계가 분명하지 않으면 혼란스러울 것이다. 아래는 자바에서 제공하는 연산자들 간의 우선순위를 정리한 표이다.
우선순위 | 연산자 | 결합방향 |
---|---|---|
1 | [ ] | → |
() | ||
. | ||
2 | ++ | ← |
-- | ||
+(양수) -(음수) | ||
~ | ||
! | ||
(type) | ||
new | ||
3 | * / % | → |
4 | +(더하기) -(빼기) | → |
+(문자 결합 연산자) | ||
5 | << | → |
>> | ||
>>> | ||
6 | < <= | → |
> >= | ||
instanceof | ||
7 | == | → |
!= | ||
8 | & | → |
& | ||
9 | ^ | → |
^ | ||
10 | | | → |
| | ||
11 | && | → |
12 | || | → |
13 | ? : | ← |
14 | = | ← |
*= /= += -= %= |
위의 표를 보는 방법을 알아보자. 아래를 계산해보자.
int a = 4-3*6;
위의 구문에는 3가지의 연산자가 등장한다. =, -, * 이다. 표에 따라서 우선순위 별로 배열해보면 *, -, =가 된다. 그러므로 연산자 *가 제일 먼저 실행된다. 따라서 첫 번째 연산은 3*6이 된다. 그 값은 18이다. 그다음 우선순위는 -다. 4-18을 해야 하는데 빼기의 결합 방향은 →이다. 따라서 4에서 18을 빼야 한다. 그 결과는 -14가 된다. 그다음 우선순위는 대입 연산자인 '='이다. '='의 결합방향은 '←'이기 때문에 -14를 변수 a에 대입해서 연산이 끝나게 된다.
위의 표를 외울 필요는 없다. 자연스럽게 이해하게 된다. 다만, 헷갈리는 경우가 있을 때 이 표의 도움을 받도록 하자.