[Java] String 비교 == 이 아니라 equals() 함수로 해야 하는 이유

모든 언어에서의 데이터 타입은 크게 원시 타입(primitive type)과 참조 타입(reference type)으로 구분된다.

원시 값은 메모리에 값이 그대로 할당된다. 하지만 참조 타입은 메모리에 실제 값이 있는 주소를 참조한다.

원시타입은 모든 숫자형, char, boolean 등이 있고, 참조 타입은 String, Class, Interface, 배열 등이 있다.

 

String이 참조 타입이니 메모리에 실제 값이 있는 주소를 참조하게 된다.

원래는 메모리 영역이 스택과 힙으로 나눠 져서 구동 되지만 이해를 돕기 위해 하나의 메모리로 그림을 그렸다.

 

위 처럼 string name과 string name2는 값이 kang 으로 같은 값이지만 메모리의 주소는 다르다.

== 는 메모리의 값을 비교 하므로 주소값이 틀려 false가 되고, equals() 함수는 메모리가 참조하는 값을 비교해서 true가 된다.

댓글

Designed by JB FACTORY