>Java >java지도 시간 >Java의 'equals()' 메서드를 잘못 재정의하면 예기치 않은 동작이 발생하는 이유는 무엇입니까?

Java의 'equals()' 메서드를 잘못 재정의하면 예기치 않은 동작이 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-16 19:01:15704검색

Why Does Incorrectly Overriding Java's `equals()` Method Lead to Unexpected Behavior?

Java equals() 메서드 재정의: 객체 요구 사항 이해

Java에서 equals() 메서드는 객체 요구 사항을 결정하는 데 중요한 역할을 합니다. 객체 평등. 설명된 대로, Book 유형의 객체를 비교하기 위해 equals() 메서드가 재정의되었습니다. 그러나 ID만으로 Book 객체를 초기화할 때 문제가 발생하여 예상치 못한 동작이 발생했습니다.

이 불일치를 이해하려면 Java가 equals() 메서드를 다음과 같이 정의한다는 점에 유의하는 것이 중요합니다.

public boolean equals(Object other);

이는 재정의된 메서드의 매개변수가 Object 유형이어야 함을 의미합니다. 제공된 코드에서:

public boolean equals(Book b) {
    ... // More code here
}

equals() 메소드는 Object 대신 Book 유형의 매개변수를 갖고 있으므로 재정의되지 않고 오버로드되었습니다. 재정의된 equals() 메서드를 사용하여 동등 비교를 수행하는 ArrayList가 대신 오버로드된 메서드를 사용했기 때문에 이러한 차이로 인해 예기치 않은 동작이 발생했습니다.

equals()를 올바르게 재정의하려면 Object 매개 변수 유형을 사용해야 합니다.

@Override
public boolean equals(Object o) {
    Book b = (Book) o;
    ... // The rest goes here   
}

이러한 수정을 통해 equals() 메소드는 Object 매개변수를 유형으로 변환하여 Book 객체를 적절하게 비교합니다. 책.

요약하자면, 메서드를 재정의할 때 슈퍼클래스나 인터페이스의 메서드 시그니처에 지정된 매개변수 유형을 준수하는 것이 중요합니다. 그렇지 않으면 예기치 않은 동작이나 오류가 발생할 수 있으므로 코드를 철저히 테스트하고 디버깅하는 것이 중요합니다.

위 내용은 Java의 'equals()' 메서드를 잘못 재정의하면 예기치 않은 동작이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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