자신의 클래스를 작성할 때 항상 equals(Object o)
을 재정의해야합니까?항상 equals를 재정의해야합니까?
그렇지 않으면 자동으로 모든 입력란이 같은지 확인하나요? 또는 두 변수가 동일한 객체를 가리키는 지 확인합니다.
자신의 클래스를 작성할 때 항상 equals(Object o)
을 재정의해야합니까?항상 equals를 재정의해야합니까?
그렇지 않으면 자동으로 모든 입력란이 같은지 확인하나요? 또는 두 변수가 동일한 객체를 가리키는 지 확인합니다.
Object 클래스의 equals 메소드는 객체에서 가능한 가장 동등한 관계를 구현합니다. 즉, null 이외의 참조 치 x 및 y에 대해서,이 메소드는 x 및 y가 같은 객체를 참조하고있는 경우에만 true를 돌려줍니다 (x == y는 true를가집니다).
두 객체가 같은 정보를 포함하고 있는지 (동일한 정보가 포함되어 있는지) 테스트하려면 equals() 메소드를 재정의해야합니다. 아이디 연산자가 자신에게 적합하지 않은 경우 항상 equals() 메소드를 대체해야합니다. 수업.
일반적으로이 메서드를 재정의 할 때마다 hashCode 메서드를 재정의해야합니다. 즉, equals 개체가 동일한 해시 코드를 가져야한다는 hashCode 메서드에 대한 일반 계약을 유지해야합니다.
의미가있는 경우에만 equals()
을 재정의하십시오. 그러나 분명히 equals()
을 무시하면 hashcode()
계약이 깨지지 않아야합니다. 즉, 두 객체가 동일하면 동일한 해시 코드를 가져야합니다.
언제 이해할 수 있습니까? Object.equals()
이 부족한 경우. Integer(10)
다른 Intger(10)
같아야하기 때문에 말이 때
번호 명백한 예이다 :이 방법은 기본적으로 두 개체이므로 같은 객체 의미 기준 신원 내린다.
또 다른 예는 데이터베이스 레코드를 나타내는 경우 일 수 있습니다. 고유 한 정수 ID를 가진 학생 기록이 있다면 은 단순히 ID 필드를 비교하기에 충분한 equals를 구현해야합니다.
IDE에 의존해서는 안되지만, Eclipse는 alt + shift + s를 누르고 equals 및 hashCode 메뉴 옵션을 선택하여이 기능을 제공합니다. toString 옵션도 있습니다. Josh Bloch의 Effective Java에는이 주제에 대한 좋은 정보가 있습니다. 링크를 클릭하면이 주제를 다루는 Google 도서에서 호스팅되는 장으로 이동합니다.