Operator
연산을 수행하는 기호
- 연산자(operator) : 연산을 수행하는 기호(+,- ,*/ 등)
- 피연산자(operand) : 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
연산자의 종류
Section titled “연산자의 종류”연산자자를 크게 기능에 의한 분류와 피연산자의 개수에 의한 분류로 나눌 수 있다.
- 기능에 의한 분류
| 연산자 | 종류 | 설명 |
|---|---|---|
| 산술 연산자 | +, -, *, /, % | 숫자 값을 대상으로 산술 연산 수행 |
| 대입 연산자 | = | 오른쪽 피연산자의 값을 왼쪽 피연산자에 대입 |
| 증감 연산자 | ++, — | 변수의 값을 1 증가시키거나 감소 |
| 비교 연산자 | >, <, >=, <=, ==, != | 두 값을 비교하여 참(true) 또는 거짓(false)을 반환 |
| 논리 연산자 | &&, ||, ! | 논리값(불리언)을 대상으로 논리 연산 수행 |
| 비트 연산자 | &, |, ^, ~, <<, >> | 정수 값을 이진수 비트 단위로 연산 |
| 기타 연산자 | instanceof, (type), ?: | 특정한 기능을 수행 |
- 피연산자의 개수에 의한 분류
| 연산자 | 종류 | 설명 |
|---|---|---|
| 단항 연산자 | ++, —, +, -, ~, !, (type) | 하나의 피연산자에 대해 연산을 수행 |
| 이항 연산자 | +, -, *, /, %, >, <, >=, <=, ==, !=, &&, ||, &, |, ^, <<, >> | 두 개의 피연산자에 대해 연산을 수행 |
| 삼항 연산자 | ?: | 세 개의 피연산자를 필요로 하는 연산자 |
연산자 우선순위와 결합규칙
Section titled “연산자 우선순위와 결합규칙”연산자의 우선순위와 결합규칙은 각 연산의 우선순위와 연산이 수행되는 방향을 결정한다.
- 산술 > 비교 > 논리 > 대입
- 곱셈/나눗셈 > 덧셈/뺄셈
- 단항 > 이항 > 삼항
- 단항 연산자와 대입 연산자를 제외한 모든 연산은 왼쪽에서 오른쪽으로 수행
이항 연산 시 두 피연산자의 타입이 일치해야 연산이 가능하기 때문에 다른 경우에는 형변환 연산자로 타입을 일치시켜야한다.
- 작은 타입에서 큰 타입으로 변환: 자동으로 변환
- 큰 타입에서 작은 타입으로 변환: 명시적으로 형변환 필요
class Example {
public static void main(String[] args) { int a = 10; double b = a; // int가 double로 자동 형변환
double a = 10.5; int b = (int) a; // double을 int로 명시적 선언 필요 }}증감 연산자
Section titled “증감 연산자”증감 연산자는 변수의 값을 1 증가시키거나 1 감소시키는 연산자로 상수가 아닌 정수와 실수에만 가능하다.
전위형 / 후위형
Section titled “전위형 / 후위형”| 타입 | 설명 |
|---|---|
| 전위형 | 연산자가 변수 앞에 위치하는 경우로 값이 참조되기 전에 증가 |
| 후위형 | 연산자가 변수 뒤에 위치하는 경우로 값이 참조된 후에 증가 |
증감 연산자가 수식이나 메서드 호출에 포함되지 않고 단독으로 사용될 경우에는 전위형과 후위형의 차이가 없으며 예시로 아래와 같다.
class Example {
public static void main(String[] args) { int x = 10; int y = 10; int z;
x++; ++x; System.out.println("x = " + x); // x = 12
y--; --y; System.out.println("y = " + y); // y = 8
z = x++; System.out.println("z = " + z); // z = 12 System.out.println("x = " + x); // x = 13
z = ++x; System.out.println("z = " + z); // z = 14 System.out.println("x = " + x); // x = 14
z = ++x + y++; System.out.println("z = " + z); // z = 23 System.out.println("x = " + x); // x = 15 System.out.println("y = " + y); // y = 9 }}