Cute Running Puppy

Language/[Java] 혼자 공부하는 자바

[#혼공챌린지] 혼자 공부하는 자바_3주차 선택미션

R.silver 2021. 7. 25. 22:58
반응형

#혼공단 #혼공챌린지 #혼공자

https://hongong.hanbit.co.kr/%ed%98%bc%ea%b3%b5-%ea%b2%8c%ec%8b%9c%ed%8c%90/?uid=27&mod=document&pageid=1

 

[#혼공챌린지] 혼공 학습단 6기 도서별 미션과 커리큘럼

안녕하세요, 한빛미디어 혼공단을 운영하는 🧙🏻‍♀️혼공족장🧙🏻‍♀️입니다. #혼공챌린지 혼공학습단 6기와 "혼자 공부하는"시리즈에 관심을 주셔서 감사합니다 🥳 딱 6주만 같이 때

hongong.hanbit.co.kr


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가 나오게 된 것이다. 

 

이러한 상황을 방지하기 위해 

포장 객체에 어떠한 값이 저장될지 모르는 상황이라면 ==, != 연산자는 사용하지 않는 것이 좋다. 

 

내부의 값을 비교하려면 

  1. 직접 내부의 값을 언박싱
  2. equals() 메소드로 내부 값 비교

의 방법을 사용하여 값을 비교하면 된다. 

 

반응형