이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르면 연산 전에 형변환 연산자로 타입을 일치시켜야 한다.
대부분의 경우 두 피연산자의 타입 중 더 큰 타입으로 일치시키는데, 그 이유는 작은 타입으로 형변환하면 원래의 값이 손실될 가능성이 있기 때문이다.
작은 타입에서 큰 타입으로 형변환 하는 경우, 자동적으로 형변환 연산자를 생략할 수 있다.( 자바가 알아서 해줌 )
두 연산자의 타입을 일치시킨다.( 보다 큰 타입으로 일치 ) long + int -> long + long float + int -> float + float double + float -> double + doble
피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. byte + int -> int + int char( ASCII ) + int -> int + int * overflow : 최댓값보다 더 큰 수가 들어가서 최솟값으로 반환( 최댓값 + 1 == 최솟값 ) * underflow : 최솟값보다 더 작은 수가 들어가서 최댓값으로 반환( 최솟값 - 1 == 최댓값 )
문자열의 산술 변환
문자열과 문자열이 아닌 것들을 더했을 때는 순서에 따라 달라진다.
문자열이 먼저 더해지면 뒤에 있는 것들의 타입이 문자열로 변해 문자끼리 붙어서 반환이 되고 다른 타입들이 먼저 나오면 그 타입에 맞게 연산을 한 뒤에 문자열이 붙는다.
5. 단항 연산자
증감 연산자 ++, --
증감 연산자는 피연산자에 저장된 값을 1 증가 또는 1 감소시킨다.
일반적으로 단항 연산자는 피연산자의 왼쪽에 위치하지만 증감 연산자는 양쪽 모두 가능하다.
피연산자의 왼쪽에 위치하면 전위형( prefix ), 피연산자의 오른쪽에 위치하면 후위형( postfix )라고 한다.
전위형과 후위형 모두 피연산자의 값을 1 증가 또는 감소시키지만 증감 연산자가 수식이나 메서드 호출에 포함된 경우 전위형 일 때와 후위형 일 때의 결과가 다르다. * 메서드 : 이름 뒤에 소괄호 * 전위형은 증가나 감소 후 대입을 하고 후위형은 대입 후 증가나 감소를 한다.
6. 산술 연산자
산술 연산자에는 +, -, *, / 와 나머지 연산자 %가 있다.
+
덧셈
-
뺄셈
*
곱셈
/
나눗셈
%
나머지
7. 관계(비교) 연산자
관계(비교) 연산자는 두 피연산자를 비교하는 데 사용되는 연산자이다.
주로 조건문과 반복문의 조건식에 사용되며, 연산 결과는 오직 true or false이다.
관계(비교) 연산자 역시 이항 연산자이므로 비교하는 피연산자의 타입이 서로 다를 경우 자료형의 범위가 큰 쪽으로 자동형 변환되어 피연산자의 타입을 일치시킨 후에 비교한다.
대소비교 연산자 >, <, >=, <=
비교연산자
연산 결과
>
좌변 값이 크면 true, 아니면 false
<
좌변 값이 작으면 true, 아니면 false
>=
좌변 값이 크거나 같으면 true, 아니면 false
<=
좌변 값이 작거나 같으면 true, 아니면 false
등가 비교 연산자 ==,!=
두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다.
기본형은 물론 참조형에도 사용할 수 있다.
기본형의 경우 변수에 저장되어 있는 값이 같은지를 알 수 있고, 참조형의 경우 객체의 주소 값을 저장하기 때문에 두 개의 피연산자가 같은 객체를 가리키고 있는지를 확인할 수 있다.
비교 연산자
연산 결과
==
두 값이 같으면 true, 아니면 false
!=
두 값이 다르면 true, 아니면 false
8. 논리 연산자
논리 연산자는 둘 이상의 조건을 '그리고( AND ) 또는 ( OR )'으로 연결하여 하나의 식으로 표현할 수 있게 해 준다.
논리 연산자 &&, ||, !
|| ( OR 결합 )
피연산자 중 어느 한쪽만 true이면 true
&& ( AND 결합 )
피연산자 모두 true여야 true
! ( NOT )
true -> false, false -> true
x
y
x || y
x && y
true
true
true
true
true
false
true
false
false
true
true
false
false
false
false
false
x
!x
true
false
false
true
비트연산자 &, |, ^, <<, >> 1byte = 8bit
0
0
0
0
0
0
0
0
2의 7
2의 6
2의 5
2의 4
2의 3
2의 2
2의 1
2의 0
128
64
32
16
8
4
2
1
비트연산자는 어떤 변수의 값을 0과 1의 조합, 즉 비트로 변환한 뒤에 비트단위로 연산을 수행한다.
주요 비트 연산으로는 AND, OR, NOT, SHIFT 연산이 있다.
종류
&
a & b
a와 b를 AND 처리( 둘 다 1 이어야 1 )
|
a | b
a와 b를 OR 처리( 둘 중 하나만 1 이면 1 )
^
a ^ b
a와 b를 XOR 처리( 두 비트가 달라야지 1 )
<<
a << 2
a를 비트로 변환하여 왼쪽으로 2비트 이동
>>
a >> 2
a를 비트로 변환하여 오른쪽으로 2비트 이동
* Integer.toBinaryString(x) : x 숫자를 2진수로 변환
9. 그 외의 연산자
조건연산자( 삼항연산자 ) ? :
조건연산자( 삼항연산자 )는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항연산자이며, 삼항연산자는 조건연산자 하나 뿐이다.
조건식 ? 식1 : 식2 ==> 조건식이 true라면 식1, 조건식이 false라면 식2
대입연산자
대입연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용한다.
대입연산자의 왼쪽 피연산자 lvalue( left value )라고 하고 오른쪽 피연산자를 rvalue( right value )라고 한다.
대입연산자의 rvalue는 변수뿐만 아니라 식이나 상수 모두 가능한 반면, lvalue는 반드시 변수처럼 변경할 수 있는 것이어야 한다.