728x90
연산자와 피연산자의 개념
연산자는 ‘연산을 수행하는 기호’를 말한다. 예를 들어 ‘+’ 기호는 덧셈 연산을 수행하며, ‘덧셈 연산자’라고 한다. 자바에서는 사칙연산(+, - , *, /)을 비롯해서 다양한 연산자를 제공한다. 연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데, 이것을 ‘피연산자(operand)’라고 한다.
연산자의 종류
종류 | 연산자 | 설명 |
산술 연산자 | + - * / % << >> | 사칙 연산과 나머지 연산(%) |
비교 연산자 | > < ≥ ≤ == != | 크고 작음과 같고 다름을 비교 |
논리 연산자 | && | '그리고(AND)와 ‘또는(OR)’으로 조건을 연결 |
대입 연산자 | = | 우변의 값을 좌변에 저장 |
기타 | (type) ?: instanceof | 형변환 연산자, 삼항 연산자, instanceof연산자 |
연산자의 우선순위
식 | 설명 |
-x + 3 | 단항 연산자가 이항 연산자보다 우선순위가 높다. 그래서 x의 부호를 바꾼 다음 덧셈이 수행된다. 여기서 ‘-’는 뺄셈 연산자가 아니라 부호 연산자이다. |
x + 3 * y | 곱셈과 나눗셈이 덧셈과 뺄셈보다 우선순위가 높다. 그래서 ‘3 * y’가 먼저 계산된다. |
x + 3 > y - 2 | 비교 연산자(>)보다 산술 연산자 ‘+’와 ‘-’가 먼저 수행된다. 그래서 ‘x + 3’과 ‘y - 2’가 먼저 계산된 다음에 ‘>’가 수행된다. |
x > 3 && x < 5 | 논리 연산자 ‘&&’보다 비교 연산자가 먼저 수행된다. ‘x > 3’와 ‘x < 5’가 먼저 계산된 다음에 ‘&&’가 수행된다. 식의 의미는 ‘x가 3보다 크고 5보다 작다’이다. |
result = x + y * 3; | 대입 연산자는 연산자 중에서 제일 우선순위가 낮다. 그래서 우변의 최종 연산결과가 변수 result에 저장된다. |
연산자의 결합규칙
위 그림의 (a)에서 덧셈 연산자의 결합 방향이 왼쪽에서 오른쪽이므로 수식의 왼쪽에 있는 ‘3 + 4’를 먼저 계산하고, 그다음에 연산 결과인 7과 5의 뺄셈을 수행한다.
(b)에서 대입 연산자는 결합 규칙이 오른쪽에서 왼쪽이므로 수식 ‘x = y = 3’에서 오른쪽의 대입 연산자부터 처리한다. 따라서 ‘y = 3’이 먼저 수행되어서 y에 3이 저장되고 그다음에 ‘x = 3’이 수행되어 x에도 3이 저장된다.
- 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
- 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
증감 연산자 ++와 --
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.
증감 연산자는 일반 산술 변환에 의한 자동 형변환이 발생하지 않으며, 연산 결과의 타입은 피연산자의 타입과 같다.
타입 | 설명 | 사용예 |
전위형 | 값이 참조되기 전에 증가시킨다. | j = ++i; |
후위형 | 값이 참조된 후에 증가시킨다. | j = i++; |
‘++i;’와 ‘i++;’처럼 증감 연산자가 수식이나 메서드 호출에 포함되지 않고 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후위형의 차이가 없다.
public static void main(String args[]){
int i=5, j=0;
j = i++;
System.out.prinln("j=i++; 실행 후, i="+ i + ", j=" + j);
i = 5;
j = 0;
j = ++i;
System.out.prinln("j=++i; 실행 후, i ="+ i + ", j=" + j);
}
// j=i++; 실행 후, i = 6, j =5
// j=++i; 실행 후, i = 6, j = 6
반응형
'Server > 자바의정석' 카테고리의 다른 글
[Java 입문] 조건문(If, If-else, If-else If, switch) (0) | 2022.09.26 |
---|---|
[Java 입문] 연산자2 (0) | 2022.09.26 |
[Java 입문] 형변환 (0) | 2022.09.26 |
[Java 입문] 기본형과 참조형 (0) | 2022.09.25 |
[Java 입문] 변수와 타입 (variable & type) (0) | 2022.09.25 |