>Java >java지도 시간 >Java에서 객체가 같은지 올바르게 비교하는 방법: equals(Object) 메서드 재정의 및 재정의

Java에서 객체가 같은지 올바르게 비교하는 방법: equals(Object) 메서드 재정의 및 재정의

WBOY
WBOY원래의
2024-01-11 17:18:05596검색

Java에서 객체가 같은지 올바르게 비교하는 방법: equals(Object) 메서드 재정의 및 재정의

Java의 equals(Object) 메소드는 두 객체가 같은지 비교하는 데 사용되는 메소드입니다. Java 클래스에서 equals 메소드는 기본적으로 Object 클래스에서 상속되며 단순히 두 객체의 참조 값을 비교합니다. 그러나 사용자 정의 방식으로 객체가 동일한지 비교해야 하는 경우가 종종 있으며, 이를 위해서는 하위 클래스의 equals 메서드를 재정의해야 합니다.

객체의 동등성을 올바르게 비교하려면 몇 가지 규칙을 따라야 합니다. 첫째, equals 메소드는 재귀성을 만족해야 하며, 이는 객체가 자신과 동일해야 함을 의미합니다. 두 번째로, equals 메소드는 대칭성을 만족해야 합니다. 즉, 객체 A가 객체 B와 같으면 객체 B와 객체 A도 동일해야 합니다. 마지막으로, equals 메소드는 전이성을 충족해야 합니다. 즉, 객체 A가 객체 B와 같고 객체 B가 객체 C와 같으면 객체 A와 객체 C도 동일해야 합니다.

equal 메서드를 재정의하고 재정의하려면 다음 핵심 사항을 고려해야 합니다.

먼저, equals 메소드의 시그니처가 Object 클래스의 equals 메소드와 일치하는지 확인해야 합니다. equals 메소드의 서명은 다음과 같아야 합니다: public boolean equals(Object obj). 이는 Object 유형의 매개변수를 승인하고 부울 값을 반환해야 함을 의미합니다.

두 번째로, 전달된 매개변수가 현재 객체 유형과 일치하는 객체인지 확인하기 위해 유형 검사를 수행해야 합니다. 이는 instanceof 키워드를 사용하여 달성할 수 있습니다. 유형 검사가 실패하면 false를 직접 반환할 수 있습니다.

그런 다음 들어오는 매개변수를 현재 객체의 유형으로 변환하고 다양한 속성의 동등성을 비교해야 합니다. 이 과정에서 우리는 Java의 equals 메소드의 구현 규칙을 따라야 합니다. 즉, 객체의 속성을 비교하려면 "==" 연산자를 사용하는 대신 equals 메소드를 사용해야 합니다.

속성 값을 비교할 때 null 참조의 경우를 고려해야 합니다. 속성 값이 null인 경우 비교를 위해 Objects 클래스의 equals 메서드를 사용할 수 있으며, 이는 null 참조 상황을 올바르게 처리합니다. 또한 기본 유형 속성의 경우 비교를 위해 "==" 연산자를 직접 사용할 수 있습니다.

마지막으로, equals 메소드가 hashCode 메소드를 재정의하는지 확인해야 합니다. Java 사양에 따르면 두 객체가 동일한 경우 해당 hashCode 메서드는 동일한 값을 반환해야 합니다. 이는 해시 테이블과 같은 데이터 구조를 사용할 때 개체가 올바르게 저장되고 검색되도록 하기 위한 것입니다.

다음은 equals 메서드를 재정의하는 방법을 보여주는 예입니다.

public class Person {
    private String name;
    private int age;
  
    // 省略构造方法、getter和setter方法
  
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Person)) {
            return false;
        }
        Person other = (Person) obj;
        return Objects.equals(this.name, other.name) && this.age == other.age;
    }
  
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
  
    // 省略其他方法
}

위의 예에서는 Person 개체의 name 및 age 속성이 같은지 비교하기 위해 equals 메서드를 재정의했습니다. 동시에 동일한 개체가 동일한 해시 코드를 갖도록 hashCode 메서드를 재정의했습니다.

요약하자면, 같음 메서드를 올바르게 다시 작성하고 재정의하면 객체가 같은지 비교할 때 올바른 결과를 얻을 수 있습니다. 주의할 점은 equals 메소드를 다시 작성하려면 반사성, 대칭성, 추이성 등의 속성을 만족해야 하며, hashCode 메소드도 다시 작성해야 한다는 점이다. 이러한 규칙을 따르면 객체의 동일성 비교를 사용할 때 올바른 결과를 얻을 수 있습니다.

위 내용은 Java에서 객체가 같은지 올바르게 비교하는 방법: equals(Object) 메서드 재정의 및 재정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.