티스토리 뷰
* equlas() : 동등성 비교 (두 객체의 내용이 같은지 확인)
* hashCode() : 동일성 비교 (두 객체가 같은 객체인지 확인)
HashCode
- 객체를 구별하기 위해(동일성 비교) 고유한 정수값으로 출력시켜주는 메소드
보통 객체의 내용을 바탕으로 만들어진 난수처럼 보이는 객체 인식용 정수 (주소와는 다른 개념이지만 객체에 고유한 번호를 부여)
- 객체 참조변수를 출력할 때, 출력되는 주소는 바로 hashCode를 16진수로 출력한 값
* 두 객체가 같으면(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 |