연산자는 연산을 수행하는 기호를 말한다. 연산자가 연산을 수행하려면 반드시 연산의 대상이 있어야하는데, 이것을 '피연산자(operand)'라고 한다
연산자(operator) 연산을 수행하는 기호(+,-,*,/ 등)
피연산자(operand) 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
연산자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다
연산자 종류 | 연산자 | 피연산자수 | 산출값 타입 | 기능 설명 |
---|---|---|---|---|
산술 | +, -, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +, - | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
대입 | =, +=, -=, *=, /= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++,-- | 단항 | 숫자 | 1만큼 증가/감소 |
비교 | ==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 값의 비교 |
논리 | !, &, |, &&, || | 단항, 이항 | boolean | 논리적 NOT,AND,OR 연산 |
조건 | (조건식)?A:B | 삼항 | 다양 | 조건식에 따라 A 또는 B중 하나를 선택 |
비트 | ~, &, |, ^ | 단항, 이항 | 숫자, boolean | 비트 NOT,AND,OR,XOR 연산 |
쉬프트 | >>, <<, >>> | 이항 | 숫자 | 비트를 좌측/우측으로 밀어서 이동 |
피연산자의 개수가 하나면 '단항 연산자', 두 개면 '이항 연산자', 세 개면 '삼항 연산자'라고 부른다.
대부분의 연산자는 '이항 연산자'이고, 삼항 연산자는 오직 "?:" 하나뿐이다
1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다
2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다
3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다
종류 | 연산방향 | 연산자 | 우선순위 |
---|---|---|---|
단항 연산자 | <-- | ++, --, +, -, ~, ! | 1 |
산술 연산자 | --> | *, /, % | 2 |
산술 연산자 | --> | +, - | 3 |
산술 연산자 | --> | <<, >>, >>> | 4 |
비교 연산자 | --> | <, >, <=, >=, instanceof | 5 |
비교 연산자 | --> | ==, != | 6 |
논리 연산자 | --> | & | 7 |
논리 연산자 | --> | ^ | 8 |
논리 연산자 | --> | | | 9 |
논리 연산자 | --> | && | 10 |
논리 연산자 | --> | || | 11 |
삼항 연산자 | --> | ?: | 12 |
대입 연산자 | <-- | =, *=, /=, +=, -=, <<=, >>= | 13 |
1. 두 피연자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치)
long + int -> long + long -> long
float + int -> float + float -> float
double + float -> double + double -> double
2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다
byte + short -> int + int -> int
char + short -> int + int -> int
모든 연산에서 '산술 변환'이 일어나지만, 쉬프트 연산자(<<,>>), 증감 연산자(++,--)는 예외이다
산술 변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
1) 두 피연산자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치)
2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다