자바 처음 하면 다들 하는 실수인데
나도 처음에 이걸로 개삽질 꽤 한거 같다
보면 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()는 텍스트 비교할때 사용하자
'IT > Java' 카테고리의 다른 글
자바 getter, setter 알아보기 (4) | 2019.01.26 |
---|---|
자바 예외처리(Exception) 알아보기 (0) | 2019.01.26 |
자바로 구구단 만들어보기 (0) | 2019.01.22 |
자바 오버로딩(Overloading) 알아보기 (0) | 2019.01.22 |
자바 오버라이드(Override) 알아보기 (1) | 2019.01.21 |
댓글