본문 바로가기

Java

[Java] String 비교할 때 ( ==, equals의 차이 )

반응형

자바에서 같은 내용의 String 문자열을 비교할 때,

언제는 == 로 비교해도 일치여부가 잘 나오고, 언제는 equals() 함수를 써야만 나올 때가 있다.

누구나 헷갈릴 수 있는 부분이기 때문에 정리를 하기로 했다.

 

아래는 ==와 equals()를 사용하는 코드이다.

 

 

위 내용을 보면, new String()을 사용해서 생성한 문자열은 '==' 기호로 제대로 비교가 되지 않는 것을 알 수 있다.

 

이유는, == 는 변수의 '메모리값'을 비교하는데,

s3과 s4가 각각 new에 의해 Heap에 서로 다른 객체를 생성하고, Reference Type이므로 주소값을 저장하기 때문이다.

따라서, new String으로 생성한 s3과 s4는 문자열의 내용을 비교하려면 equals() 함수를 반드시 사용해야 한다.

 

반면, s1과 s2는 로컬변수이므로 Stack에 만들어지고, 그 변수에 이 저장된다.

반응형