티스토리 뷰

Java

Java equals() & hashCode()

lkh's 2018. 10. 4. 01:40


* equlas() : 동등성 비교 (두 객체의 내용이 같은지 확인)

* hashCode() : 동일성 비교 (두 객체가 같은 객체인지 확인)


HashCode

 - 객체를 구별하기 위해(동일성 비교) 고유한 정수값으로 출력시켜주는 메소드

    보통 객체의 내용을 바탕으로 만들어진 난수처럼 보이는 객체 인식용 정수 (소와는 다른 개념이지만 객체에 고유한 번호를 부여)

 - 객체 참조변수를 출력할 때, 출력되는 주소는 바로 hashCode16진수로 출력한 값


* 두 객체가 같으면(equals() 메소드 호출 시 true 반환) 반드시 같은 hashcode를 가져야 한다.

  why..? equals() 메소드는 기본적으로 "==" 연산자를 이용해서 같은 객체를 참조하는지 비교 (결국, 같은 주소값을 보유하는지 비교)

           그렇기 때문에, equals() 메소드를 Override 하지 않으면, 두 객체는 같은 내용을 가져도 동등한 객체로 판단될 수 없다!


* 두 객체의 hashcode가 같다고 해서, 두 객체가 같은 객체는 아니다! --> 두 객체의 hashcode가 같다고, a.equals(b)가 true 나오는 것은 아니다!

  why..? hashCode() 메소드를 사용하면 결과값은 int 정수로 리턴

           String은 무한한 종류로 생성이 가능하지만, hashCode()는 2^32의 수만큼만 생성이 가능

           그렇기 때문에 운이 없으면, 다른 객체가 동일한 hashCode를 가질 수있다!


'Java' 카테고리의 다른 글

멀티스레드  (0) 2018.10.27
예외처리2 - 사용자 정의 예외 클래스 생성  (0) 2018.10.04
예외처리1 - 오류와 예외  (0) 2018.10.04
Package & Import  (0) 2018.09.17
자바 가상 기계 (JVM) 정의 및 구조  (0) 2018.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함