본문 바로가기
IT/Java

자바 ==와 equals() 차이 알아보기

by flatsun 2019. 1. 23.
반응형


자바 처음 하면 다들 하는 실수인데

나도 처음에 이걸로 개삽질 꽤 한거 같다


보면 String a나 b나 똑같은 haha라 비교 시 당연히 True가 뜰 것 같은데




예상을 뒤엎고 false가 뜬다


아니 똑같은 haha인데 왜 다르다고 하지?



웃긴게 a와 d는 비교시 다르다고 뜨고

b와 c는 같다고 뜬다


이건 뭐..


이렇게 뜨는 이유를 알아보자면


System.identityHashCode(변수명) 을 사용해서 알아볼 수 있는데



identityHashCode를 넣고 출력을 해 보니까


new String("haha") 와 "haha"로 변수의 값을 줬을 때

해시코드 주소가 다르다!!


그 말은..?


new String("haha")은 새 String 객체에 haha라는 값을 넣고 그걸 넣은 것이지만

String b = "haha" 는 그냥 haha라는 값을 String b에 넣은 것이다


결국 new String은 새로 객체를 정의하고 값을 넣어 주소가 정의할 때마다 다르지만

"haha" 를 준 경우에는 새로 객체를 정의한 것이 아니기 때문에

몇번을 줘도 주소가 똑같은 것이다!!


근데 이러면 new String을 사용할 경우에는 비교를 어떻게 하지?


.equals() 사용하면 되는데



변수.eqauls(변수) 를 통해 실제 텍스트가 똑같은지 비교를 할 수 있다


이제 간단하게 요약이 되는데


똑같은 텍스트인데도 ==로 비교가 안 되는건

 새로 정의하느라 값은 똑같은데 주소가 달라져서 그런거고

System.identityHashCode(변수명)를 통해 

실제 어디에서 가져오는지 주소를 확인할 수 있다


==는 숫자 비교할 때 사용하고 equals()는 텍스트 비교할때 사용하자

반응형

댓글