반응형
#혼공단 #혼공챌린지 #혼공자
3주차 선택 미션
p.512 문제 8번 풀이 인증샷
박싱된 Integer 객체를 == 연산자로 비교했습니다. 100을 박싱한 Integer 객체는 true가 나오는데, 300을 박싱한 Integer 객체는 false가 나오는 이유를 설명해보세요
package sec01.verify.exam08;
public class IntegerCompareExample {
public static void main(String[] args) {
Integer obj1 = 100;
Integer obj2 = 100;
Integer obj3 = 300;
Integer obj4 = 300;
System.out.println( obj1 == obj2);
System.out.println( obj3 == obj4);
}
}
실행 결과
true
false
자바에서는 아래 표와 같은 규칙이 있다.
타입 | 값의 범위 |
boolean | true, false |
char | \u0000 ~ \u0071 |
byte, short, int | -128 ~ 127 |
박싱된 값의 범위가 타입의 값의 범위를 넘어갈 때에는 ==과 != 연산자로 내부의 값을 비교할 수 없다.
값의 범위를 넘어간 경우에는 내부의 값을 비교하는 것이 아니라 번지를 비교하기 때문이다.
그렇기에
System.out.println( obj3 == obj4);
의 값이 false 가 나오는 이유는
obj3과 obj4가 int 형의 값의 범위인 -128 ~ 127을 넘어갔기 때문에
내부의 값을 비교하는 것이 아니라 번지를 비교하게 되어 false가 나오게 된 것이다.
이러한 상황을 방지하기 위해
포장 객체에 어떠한 값이 저장될지 모르는 상황이라면 ==, != 연산자는 사용하지 않는 것이 좋다.
내부의 값을 비교하려면
- 직접 내부의 값을 언박싱
- equals() 메소드로 내부 값 비교
의 방법을 사용하여 값을 비교하면 된다.
반응형
'Language > [Java] 혼자 공부하는 자바' 카테고리의 다른 글
[#혼공챌린지] 혼자 공부하는 자바_4주차 선택미션 (0) | 2021.08.01 |
---|---|
[#혼공챌린지] 혼자 공부하는 자바_4주차 기본미션 (0) | 2021.08.01 |
[#혼공챌린지] 혼자 공부하는 자바_3주차 기본미션 (0) | 2021.07.25 |
[#혼공챌린지] 혼자 공부하는 자바_2주차 선택미션 (0) | 2021.07.19 |
[#혼공챌린지] 혼자 공부하는 자바_2주차 기본미션 (0) | 2021.07.19 |