본문 바로가기

Java

문자열 비교가 안되는 경우 해결 방법 (==, equals 이용)

== 을 이용했는데도 문자열 비교가 되지 않을 때가 있다. 왜 일까?

다음 예에서 map.get("TYPE")은 분명 "A"를 담고 있는데도 말이다.

Map map = new HashMap();
map.put("TYPE","A");

if(map.get("TYPE") == "A") {
		 // 들어오지 않는다.
}

 

기본 타입 변수간의 == 연산자는 단순히 변수의 값이 같은지, 아닌지를 조사하지만 

참조 타입 변수들 간의 == 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용된다.

 

참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소 값을 비교하는 것이 된다.

동일한 주소 값을 갖고 있다는 것은 동일한 객체를 참조한다는 의미이다.

 

위의 예에서 map은 Map 타입 변수이므로 참조 타입 변수이다. 

"A"는 단순히 문자열 리터럴로 생성되었다.

 

이 둘을 비교했을 때 변수에 저장된 객체 번지가 동일한지를 검사하기 때문에 당연히 false가 나오게 된다.

 

동일한 객체를 참조하건 다른 객체를 참조하건 상관없이 문자열만 비교하고 싶을 때에는 String 객체의 equals() 메소드를 사용해야 한다.

if("A".equals(map.get("TYPE"))){
			// 들어온다.
}