연산자는 필요로 하는 연산자의 수에 따라 단항, 이항, 삼항 연산자로 구분된다.
부호 연산자와 증감 연산자는 피연산자 하나만을 요구하므로 단항 연산자이고, 조건 연산자는 조건식, A, B와 같이 3개의 피연산자가 필요하므로 삼항 연산자라고 한다.
그 외의 연산자는 2개의 피연산자를 요구하므로 모두 이항 연산자이다.
단항 연산자
단항 연산자는 피연산자가 단 하나뿐인 연산자를 말하며, 여기에는 부호 연산자(+, -), 증감 연산자(++, --), 논리 부정 연산자(!)가 있다.
부호 연산자
부호 연산자는 양수 및 음수를 표시하는 +, - 를 말한다. boolean 타입과 char 타입을 제외한 나머지 기본 타입에 사용할 수 있다.
| 연산식 | 설명 | |
| + | 피연산자 | 피연산자의 부호 유지 |
| - | 피연산자 | 피연산자의 부호 변경 |
+, - 는 산술 연산자이기도 하고 부호 연산자이기도 한데, 부호 연산자로 쓰일 때에는 하나의 피연산자만 필요하다.
일반적으로 부호 연산자를 다음과 같이 정수 및 실수 리터럴 앞에 붙여 양수 및 음수를 표현한다.
int i1 = +100;
int i2 = -100;
double d1 = +3.14;
doubel d2 = -3.14;
부호 연산자는 정수 및 실수 타입 변수 앞에도 붙일 수 있다. 이 경우는 변수값의 부호를 유지하거나 바꾸기 위해 사용 된다.
+ 연산자는 변수값의 부호를 유지하고 - 연산자는 변수값의 부호를 양수는 음수로, 음수는 양수로 바꾼다.
밑의 코드를 보면 result1 에는 x 값인 음수 -100 이 그대로 저장된다. 하지만 result2 에는 부호가 변경된 양수 100이 저장된다.
int x = -100;
int result1 = +x;
int result2 = -x;
주의할 점은 부호 연산자의 결과가 int 타입이라는 것이다. 예를 들어 byte 타입의 변수가 있을 때 그 변수의 부호 연산으 진행하면 int 타입으로 변환돤다. 따라서 부호 연산을 사용했다면 변수를 int 타입의 변수에 저장해야 한다.
증감 연산자
증감 연산자는 변수의 값을 1 증가(++) 시키거나 1 감수(--)시키는 연산자를 말한다. boolean 타입을 제외한 모든 기본 타입의 피연산자에 사용할 수 있다.
| 연산식 | 설명 | |
| ++ | 피연산자 | 다른 연산을 수행하기 전에 피연산자의 값을 1 증가시킴 |
| -- | 피연산자 | 다른 연산을 수행하기 전에 피연산자의 값을 1 감소시킴 |
| 피연산자 | ++ | 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴 |
| 피연산자 | -- | 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴 |
논리 부정 연산자
논리 부정 연산자는 true 를 false 로, false 를 true 로 변경하기 때문에 boolean 타입에만 사용할 수 있다.
| 연산식 | 설명 | |
| ! | 피연산자 | 피연산자가 true이면 false 값을 산출 피연산자가 false이면 true 값을 산출 |
논리 부정 연산자는 조건문과 제어문에서 조건식의 값을 부정하도록 해서 실행 흐름을 제어할 때 주로 사용한다.
또한 두 가지 상태(true/false)를 번갈아가며 변경하는 토글 가능을 구현할 때도 사용한다.
이항 연산자
이항 연산자는 피연산자가 2개인 연산자를 말하며 여기에는 산술 연산자(+, -, *, /, %), 문자열 겹합 연산자(+), 비교 연산자(<, >, <=, >=, ==, !=), 논리 연산자(&&, ||, &, |, ^, !), 대입연산자(=, +=, -=, *=, /=, %=) 등이 있다.
산술 연산자
산술 연산자는 사칙연산자인 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 과 나머지를 구하는 % 까지 총 5개가 있다.
산술연산자는 boolean 타입을 제외한 모든 기본 타입에 사용할 수 있다.
| 연산식 | 설명 | ||
| 피연산자 | + | 피연산자 | 덧셈 연산 |
| 피연산자 | - | 피연산자 | 뺄셈 연산 |
| 피연산자 | * | 피연산자 | 곱셈 연산 |
| 피연산자 | / | 피연산자 | 왼쪽 피연산자를 오른쪽 피연산자로 나눗셈 연산 |
| 피연산자 | % | 피연산자 | 왼쪽 피연산자를 오늘쪽 피연산자로 나눈 나머지를 구하는 연산 |
% 연산자는 나눗셈을 수행한 후 목이 아닌 나머지를 돌려주는 연산자이다.
산술 연산자의 특징은 피연산자들의 타입이 동일하지 않을 경우 다음과 같은 규칙을 사용해서 피연산자들의 타입을 일치시킨 후 연산을 수행한다는 점이다.
① 피연산자들이 byte, shortm char 타입일 경우 모두 int 타입으로 변환한 후에 연산을 수행한다.
예) byte + byte ➔ int + int = int
② 피연산자들이 모두 정수 타입이고 long 타입이 포함되어 있을 경우, 모두 long 타입으로 변환된 후 연산을 수행한다.
예) int + long ➔ long + long = long
③ 피연산자 중 실수 타입(float, double)이 있을 경우, 허용 범위가 더 큰 실수 타입으로 변환된 후 연산을 수행한다.
예) int + double ➔ double + double = double
문자열 결합 연산자
문자열 결합 연산자인 + 는 문자열을 서로 결합하는 연산자이다. + 연산자는 산술 연산자, 부호 연산자인 동시에 문자열 결합 연산자 이기도 하다. 피연산자 중 한쪽이 문자열이면 + 연산자는 문자열 결합 연산자로 사용되어 다른 피연산자를 문자열로 변환하고 서로 결합한다.
비교 연산자
비교 연산자는 피연산자의 대소(<,>, <=, >=) 또는 동등(==, !=)으 비교해서 true/false 를 산출한다.
대소 연산자는 boolean을 제외한 모든 기본 타입에 사용할 수 있고, 동등 연산자는 모든 타입에 사용할 수 있다. 비교 연산자는 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용되어 실행 흐름을 제어할 때 사용된다.
| 구분 | 연산식 | 설명 | ||
| 동등 비교 |
피연산자1 | == | 피연산자2 | 두 피연산자의 값이 같은지를 검사 |
| 피연산자1 | != | 피연산자2 | 두 피연산자의 갓ㅂ이 다른지를 검사 | |
| 크기 비교 |
피연산자1 | > | 피연산자2 | 피연산자1이 큰지를 검사 |
| 피연산자1 | >= | 피연산자2 | 피연산자1이 크거나 같은지를 검사 | |
| 피연산자1 | < | 피연산자2 | 피연산자1이 작은지를 검사 | |
| 피연산자1 | <= | 피연산자2 | 피연산자1이 작거나 같은지를 검사 | |
논리 연산자
논리 연산자는 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산을 수행한다.
논리 연산자의 피연산자는 boolean 타입만 사용할 수 있다.
| 구분 | 연산식 | 결과 | 설명 | ||
| AND (논리곱) |
true | && 또는 & |
true | true | 피연산자 모두가 true일 경우에만 연산 결과가 true |
| true | false | false | |||
| false | true | false | |||
| false | false | false | |||
| OR (논리합) |
true | || 또는 | |
true | true | 피연산자 중 하나만 ture 이면 연산 결과는 true |
| true | false | true | |||
| false | true | true | |||
| false | false | false | |||
| XOR (배타적 논리합) |
true | ^ | true | false | 피연산자가 하나는 true 이고 다른 하나가 false 일 경우에만 연산 결과가 true |
| true | false | true | |||
| false | true | true | |||
| false | false | false | |||
| NOT (논리 부정) |
! | true | false | 피연산자의 논리값을 바꿈 | |
| false | true | ||||
&&와 &는 산출 결과는 같지만 연산 과정이 조금 다르다. && 는 앞의 피연산자가 false 라면 뒤의 피연산자를 평가하지 않고 바로 false 라는 산출 결과를 낸다. 왜냐하면 하나라도 false 라면 전체 연산식은 false 이기 때문이다. 그러나 &는 두 피연산자 모두를 평가해서 산출 결과를 낸다. 따라서 &보다는 &&가 더 효율적이다.
|| 와 | 도 마찬가지이다. || 는 앞의 피연산자가 true 라면 뒤의 피연산자를 평가하지 않고 바로 true라는 산출값을 낸다.
왜냐하면 하나라도 true 라면 전체 연산식은 true 이기 때문이다. 그러나 |는 두 피연산자 모두를 평가해서 산출 결과를 낸다.
따라서 | 보다는 || 가 더 효율적으로 동작한다.
논리 연산은 흐름 제어문인 조건문(if), 반복문(for, while) 등에서 주로 이용된다.
대입 연산자
대입 연산자는 오른쪽 피연산자의 값을 왼쪽 피연산자인 변수에 저장한다. 오른쪽 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있다. 단순히 오른쪽 피연산자의 값을 변수에 저장하는 단순 대입 연산자가 있고, 정해진 연산을 수행한 후 결과를 변수에 저장하는 복합 대입 연산자도 있다.
| 구분 | 연산식 | 설명 | ||
| 단순 대입 연산자 | 변수 | = | 피연산자 | 오른쪽의 피연산자의 값을 왼쪽 변수에 저장 |
| 복합 대입 연산자 | 변수 | += | 피연산자 | 변수 = 변수 + 피연산자와 동일 |
| 변수 | -= | 피연산자 | 변수 = 변수 - 피연산자와 동일 | |
| 변수 | *= | 피연산자 | 변수 = 변수 * 피연산자와 동일 | |
| 변수 | /= | 피연산자 | 변수 = 변수 / 피연산자와 동일 | |
| 변수 | %= | 피연산자 | 변수 = 변수 % 피연산자와 동일 | |
| 변수 | &= | 피연산자 | 변수 = 변수 & 피연산자와 동일 | |
| 변수 | |= | 피연산자 | 변수 = 변수 | 피연산자와 동일 | |
| 변수 | ^= | 피연산자 | 변수 = 변수 ^ 피연산자와 동일 | |
대입 연산자는 모든 연산자들 중에서 가장 낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행된다.
그리고 연산의 진행 방향이 올느쪽에서 왼쪽이기 때문에 a = b = c = 5 는 다음 순서로 연산된다.
1. a = b = c = 5
2. a = b = 5
3. a = 5
삼항 연산자
삼항 연산자는 3개의 피연산자를 필요로 하는 연산자를 말한다. 삼항 연산자는 ? 앞의 조건식에 따라 콜론(:) 앞뒤의 피연산자가 선택된다고 해서 조건 연산식 이라고 부르기도 한다.
삼항 연산자를 사용하는 방법은 아래와 같다.
조건식(피연산자1) ? 값 또는 연산식(피연산자2) : 값 또는 연산식(피연산자3)
만약 조건식이 참 이라면 피연산자2가 결과가 되고 조건식이 거짓이라면 피연산자3이 결과가 된다.
int score = 95;
char grade = (score > 90) ? 'A' : 'B';
위의 삼항 연산자를 봤을 때 결과값은 grade 안에 'A' 가 저장된 것을 확인할 수 있다.