본문 바로가기
혼공자

[혼공단 7기] 혼자 공부하는 자바 3주차

by 도리에몽 2022. 1. 31.

▶ 3주차 기본 미션

혼공 용어 노트에 용어 추가 등 노트 활용하고 공유하기

 

 

▶ 3주차 선택 미션

p. 512 문제 8번 풀고 풀이 과정 설명하기

 

- IntegerCompareExample.java

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 ~ \u007f
byte, short, int -128 ~ 127

Wrapper 객체에 대해 ==!= 연산자는 내부의 값을 비교하는 것이 아니라 Wrapper 객체의 참조를 비교한다. 박싱된 값이 표에 나와 있는 범위 안에 포함된다면 ==와 != 연산자로 내부의 값을 바로 비교할 수 있지만, 그 이외의 경우에는 언박싱한 값을 얻어 비교해야 한다.

따라서 100은 int 타입의 범위 안에 포함되므로 내부의 값을 비교할 수 있어 obj1 == obj2의 결과가 true이다.

하지만, 300은 범위에 포함되지 않으므로 obj3와 obj4의 참조를 비교하여 결과를 도출한다. 두 객체의 주소는 다르기 때문에 결과는 false이다. Wrapper 객체를 비교할 때는 직접 내부 값을 언박싱해서 비교하거나, equals() 메소드로 내부 값을 비교하는 것을 권장한다.