Equals()는 흔히 동등 비교라고 하며, 객체의 필드 값을 비교하여 두 객체의 같은지를 여부를 결정 함.
Equals()를 재정의 하지 않을 경우 == 통해 객체의 동일 비교가 이루어 짐.
== 연산자 → 두 객체의 참조를 비교하는 연산자. 비교하는 값이 기본타입(Primitive type)인 경우 값이 같은지 비교하고, 참조타입(reference type) 일 때는 가르키는 주소값이 같은 지 비교 함.
Equals() → 두 객체의 내용적인 동등성을 비교하는 연산자
객체의 해시코드 값을 반환 하며, 해시 코드는 객체를 구분하는 유일한 값으로써, 객체를 저장하거나 검색하는 자료구조에서 사용 됨.
두 객체가 Equal 비교해서 같다면, HashCode는 항상 같은 값을 반환해야 함.
해시 충돌을 최소화 하기 위해, Equal에 사용 되는 필드로 해시 코드를 계산해야 함.
또한, HashCode로 계산할 필드를 선택할 때는 변경 가능한 필드를 선택하면 안됨. 왜냐하면 Set, HashMap에 저장한 뒤, 해당 필드의 값을 변경하면 HashCode 값도 변경되어 찾을 수 없는 현상이 발생하기 때문.
그러므로, 동일한 객체는 동일한 메모리 주소(해시 코드)를 가지도록 Equals()와 HashCode()를 함께 재정의 해주어야 함.
HashMap은 내부적으로 배열을 사용하여 해시 테이블을 구현함.