본문 바로가기

혼공학습단 8기

[혼공학습단] 혼자 공부하는 자바 3주차

📚 기본미션 :  혼공 용어 노트에 용어 추가 등 노트 활용하고 공유하기

 

📚 선택미션 : 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