> Java > java지도 시간 > Java의 `.equals()` 메소드의 `getClass()`와 `instanceof` 비교: 어느 것이 더 낫습니까?

Java의 `.equals()` 메소드의 `getClass()`와 `instanceof` 비교: 어느 것이 더 낫습니까?

Barbara Streisand
풀어 주다: 2024-11-25 03:38:11
원래의
676명이 탐색했습니다.

`getClass()` vs. `instanceof` in Java's `.equals()` Method: Which is Better?

.equals() 생성에서 getClass()와 인스턴스of의 우선 사용

.equals() 및 .equals()에 대한 Eclipse 코드 생성기를 활용하는 경우 .hashCode()의 경우 유형 비교를 위해 'instanceof'를 사용하거나 .getClass()를 사용하는 옵션이 나타날 수 있습니다. 기본 선택은 .getClass()이지만 이 기사에서는 instanceof에 비해 .getClass()를 사용하면 어떤 이점이 있는지 조사합니다.

instanceof가 없는 비교:

if (obj == null)
  return false;
if (getClass() != obj.getClass())
  return false;
로그인 후 복사

사용한 비교 instanceof:

if (obj == null)
  return false;
if (!(obj instanceof MyClass))
  return false;
로그인 후 복사

일반적으로 null 개체는 필연적으로 instanceof에 실패하므로 "if (obj == null)" 검사를 제거하고 instanceof 옵션을 사용하는 것이 좋습니다. 그러나 이 관행은 본질적으로 잘못된 것입니까?

인스턴스에 대한 주장

유명한 Java 전문가 Josh Bloch는 다음과 같은 추론을 인용하면서 이 접근 방식을 지지합니다.

  • getClass()를 사용하면 동일한 클래스에 속하는 객체로만 객체 동등성을 제한하고 런타임 유형입니다.
  • 클래스가 무해한 메소드로 확장되면 하위 클래스와 상위 클래스의 객체는 동일한 필수 속성에도 불구하고 잘못 간주될 수 있습니다.
  • 이는 Liskov 대체 원칙을 위반할 수 있으며 잠재적으로 예상치 못한 동작으로 이어집니다.
  • Java의 컬렉션 프레임워크(예: HashTable)는 equals 메서드에 크게 의존합니다. .getClass()를 사용하면 하위 클래스 인스턴스로 쿼리할 때 상위 클래스의 객체가 불평등으로 인해 해시 테이블에서 검색되지 않을 수 있습니다.

추가 리소스

  • [그래서 답변](https://stackoverflow.com/questions/2810849/what-is-the-performance-complexity-of-using-instanceof-keyword-in-java)
  • [효과적인 Java 장 3](https://books.google.com/books?id=XY6a0H0G7LsC&pg=SA3-PA34&lpg=SA3-PA34&dq=Josh Bloch 인스턴스 getClass 같음&source=bl&ots=1P2j4a8S-Q&sig=ACfU3U0pWgTLs2MNGhf5Nq4Giq6hYH8MgQ&hl=en)

위 내용은 Java의 `.equals()` 메소드의 `getClass()`와 `instanceof` 비교: 어느 것이 더 낫습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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