> Java > java지도 시간 > 특정 매개변수(예: `Book`)로 `equals()`를 재정의하면 Java의 동등성 검사가 중단되는 이유는 무엇입니까?

특정 매개변수(예: `Book`)로 `equals()`를 재정의하면 Java의 동등성 검사가 중단되는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-31 22:25:09
원래의
1041명이 탐색했습니다.

Why Does Overriding `equals()` with a Specific Parameter (e.g., `Book`) Break Java's Equality Checks?

Java의 equals() 메서드를 Book 매개변수로 재정의하면 문제가 발생하는 이유

사용자 정의 동등성 검사를 구현하려면 equals() 메서드 재정의가 필수적입니다. 자바에서. 그러나 표준 equals(Object) 메서드 대신 Book 매개 변수와 함께 사용자 지정 equals() 메서드를 사용하면 예기치 않은 동작이 발생할 수 있습니다.

equals() 메서드 이해

기본적으로 Java는 Object 매개변수를 취하는 Object 클래스에 equals() 메소드를 정의합니다. 특정 유형의 객체를 비교하기 위해 사용자 정의 클래스에서 equals()를 재정의하려면 동일한 시그니처(예: equals(Object))를 준수해야 합니다.

재정의와 오버로딩

오버라이딩은 슈퍼클래스에서 상속된 메서드에 대한 새로운 구현을 제공하는 것으로 정의됩니다. 반면에 오버로딩은 다양한 매개변수 유형으로 메소드 이름을 재사용하는 것입니다.

제공된 코드에서 public boolean equals(Book b) 메소드는 오버라이딩이 아닌 오버로딩을 구성합니다. 원래의 equals(Object) 메소드와 다른 매개변수 유형을 사용하기 때문입니다.

오버로딩 문제

equals() 메소드를 오버로드하면, 이는 동등성 검사를 위해 equals(Object)를 사용하는 표준 라이브러리 클래스와의 호환성을 깨뜨립니다. 예를 들어 ArrayList는 요소가 목록에 있는지 확인하기 위해 equals(Object)를 사용합니다.

따라서 hasBook() 메서드에서 오버로드된 equals(Book) 메서드를 사용하면 contain()이 실패하게 됩니다. ID만으로 인스턴스화된 Book 개체를 비교할 때

해결 방법

이 문제를 해결하려면 문제인 경우에는 equals(Object) 서명을 따라 equals() 메서드를 올바르게 재정의해야 합니다. 이는 동등성 검사를 위해 equals(Object)를 사용하는 표준 라이브러리 클래스와의 호환성을 보장합니다.

위 내용은 특정 매개변수(예: `Book`)로 `equals()`를 재정의하면 Java의 동등성 검사가 중단되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿