📚 기본미션 : 혼공 용어 노트에 용어 추가 등 노트 활용하고 공유하기
📚 선택미션 : p.512 문제 8번 풀고 풀이 과정 설명하기
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); //true
System.out.println(obj3 == obj4); //false
}
}
박싱된 객체의 비교에 대한 문제.
박싱된 값이 아래 범위의 값이라면 ==와 != 연산자로 내부의 값을 비교할 수 있는 법칙이 있다.
타입 | 값의 범위 |
boolean | true, false |
char | \u0000 ~ \u007f |
byte, short, int | -128 ~ 127 |
obj1와 obj2는 -128 ~ 127 범위 안에 들어가기 때문에 내부의 값을 비교할 수 있지만, 이 범위를 벗어난 obj3과 obj4는 내부의 값을 비교하는 것이 아니라 포장 객체의 참조를 비교하기 때문에 결과는 false가 나온다.
그렇다면 이런 범위에 상관없이 포장 객체의 내부 값을 비교하는 방법은?
1) 언박싱 후 비교
// 언박싱
int num1 = obj1.intValue();
int num2 = obj2.intValue();
int num3 = obj3.intValue();
int num4 = obj4.intValue();
// 언박싱하는 다른 방법 1 (단순 대입)
int num5 = obj1;
// 언박싱하는 다른 방법 2 (연산)
int num6 = obj2 + 100;
System.out.println(num1 == num2); //true
System.out.println(num3 == num4); //true
2) equals() 메소드 사용 (간단!)
Integer obj3 = 500;
Integer obj4 = 500;
System.out.println(obj3.equals(obj4)); // true
'혼공학습단 8기' 카테고리의 다른 글
[혼공학습단] 혼자 공부하는 자바 4주차 (0) | 2022.07.31 |
---|---|
[혼공학습단] 혼자 공부하는 자바 2주차 (0) | 2022.07.17 |
[혼공학습단] 혼자 공부하는 자바 1주차 (0) | 2022.07.10 |