- 문자열을 비교할 때는 비교 연산자 '==' 대신 equals()라는 메서드를 사용해야 함
- 비교 연산자 '=='를 사용하는 것은 같은 객체인지 확인하는 것임
2. 논리 연산자
1) 논리 연산자 && || !
논리연산자
연산결과
|| (OR결합)
피연산자 중 어느 한 쪽만 true이면 true
&& (AND결합)
피연산자 양쪽 모두 true이어야 true
- 논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 한느 조건식만 허용
- x와 y 값에 따른 논리 연산결과
x
y
x || y
x && y
true
true
true
true
true
false
true
false
false
true
true
false
false
false
false
false
효율적인 연산(short circuit evaluation)
- 논리 연산자는 효율적인 연산을 함 - || (OR 연산)의 경우 피연산자 중 어느 한 쪽만 '참'이어도 전체 연산결과가 '참'이므로 다른 피연산자의 값을 평가하지 않음 - && (AND 연산)의 경우 피연산자 중 어느 한 쪽만 '거짓'이어도 전체 연산결과가 '거짓'이므로 다른 피연산자의 값을 평가하지 않음
2) 논리 부정 연산자 !
- 피연산자가 true이면 false를, false면 true를 결과로 반환
- !를 여러 번 사용하여 연산할 수 있음
3) 비트 연산자 & | ^
- 피연산자를 비트단위로 논리 연산
비트연산자
연산결과
| (OR연산자)
피연산자 중 한 쪽의 값이 1이면 결과는 1, 그 외에는 0
& (AND연산자)
피연산자 양 쪽이 모두 1이어야만 결과는 1
^ (XOR연산자)
피연산자의 값이 서로 다를 때만 결과는 1, 같을 때는 0
x
y
x | y
x & y
x ^ y
1
1
1
1
0
1
0
1
0
1
0
1
1
0
1
0
0
0
0
0
4) 비트 전환 연산자 ~
- 피연산자를 2진수로 표현했을 때, 0은 1로, 1은 0으로 바꿈
5) 쉬프트 연산자 << >>
- 피연산자의 각 자리를(2진수로 표현했을 때)를 '오른쪽(>>)' 또는 '왼쪽(<<)'으로 이동(shitf)함
- '<<' : 피연산자의 부호에 상관없이 각 자리를 왼쪽으로 이동시키며 빈칸을 0으로 채움
- '>>' : 각 자리를 오른쪽으로 이동시키며 부호있는 정수는 부호를 유지하기 위해 왼쪽 피연산자가 음수인 경우 빈자리를 1로 채우고, 양수인 경우 빈자리를 0으로 채움
- 좌측 피연산자는 int타입으로 자동 변환되고 연산결과 또한 int타입이 됨
- 우측 피연산자는 피연산자의 타입을 일치시킬 필요가 없기 때문에 산술변환이 적용되지 않음
public class Test {
public static void main(String[] args) {
int x = 10, y = 5, result = 0;
result = (x > y) ? x : y; // 조건식이 true이므로 result는 x의 값인 10
result = (x == y) ? 0 : 1; // 조건식이 false이므로 result는 1
}
}
- 조건 연산자를 중첩해서 사용하면 셋 이상 중의 하나를 결과로 얻을 수 있음
ex) result = x > 0 ? 1 : ( x == 0 ? 0 : -1);
- 두 피연산자의 타입이 다른 경우, 산술 변환이 발생
2) 대입 연산자 =
- 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용
- 가장 낮은 우선순위를 가지고 있어 식에서 제일 나중에 수행됨
- 오른쪽에서 왼쪽으로 수행됨
- lvalue(left value) : 대입 연산자의 왼쪽 피연산자 (반드시 값을 변경할 수 있는 것, 리터럴이나 상수같은 값을 저장할 수 없는 것은 불가능)
- rvalue(right value) : 대입 연산자의 오른쪽 피연산자 (변수, 식, 상수 모두 가능)
3) 복합 대입 연산자 op=
- 대입 연산자는 다른 연산자(op)와 결합하여 'op='와 같은 방식으로 사용될 수 있음