>Java >java지도 시간 >`getClass()`와 `equals()`의 `instanceof`: 어느 것을 사용해야 합니까?

`getClass()`와 `equals()`의 `instanceof`: 어느 것을 사용해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-03 10:59:08636검색

`getClass()` vs. `instanceof` in `equals()`: Which Should You Use?

.equals() 메서드에 'getClass()' 또는 'instanceof'를 사용해야 합니까?

.equals()를 생성할 때 Eclipse를 사용하는 메서드의 경우 'instanceof' 또는 '.getClass()'를 사용하여 유형을 비교하는 옵션이 있습니다. 기본적으로 Eclipse는 '.getClass()'를 사용하므로 많은 프로그래머가 'instanceof'로 전환해야 할지 고민하게 됩니다.

차이점이 무엇인가요?

.getClass()는 두 객체의 런타임 유형을 직접 비교하는 반면, instanceof는 객체가 특정 클래스나 인터페이스의 인스턴스인지 확인합니다. 예:

if (getClass() != obj.getClass()) // Using getClass()
if (!(obj instanceof MyClass)) // Using instanceof

어떤 것을 사용해야 합니까?

Java 전문가 Josh Bloch에 따르면 'instanceof'는 제한하지 않기 때문에 선호되는 접근 방식입니다. 동일한 런타임 유형과 동일합니다. 즉, 동일한 중요한 측면을 공유하는 객체의 동등성에 영향을 주지 않고 클래스를 확장하고 메서드를 추가할 수 있습니다.

게다가 이는 하위 클래스를 사용할 수 있어야 한다는 Liskov 대체 원칙과도 일치합니다. 코드를 깨지 않고 슈퍼클래스를 대신합니다. '.getClass()'를 사용하면 이 원칙을 위반하여 HashTable과 같은 컬렉션에서 예기치 않은 동작이 발생합니다.

요약하면 'instanceof'는 더 많은 유연성을 제공하며 .equals() 메서드에 권장됩니다. 'instanceof'를 사용하여 'if (obj == null)' 확인을 제거할 수 있지만 일반적으로 명확성과 완전성을 위해 유지하는 것이 좋습니다.

위 내용은 `getClass()`와 `equals()`의 `instanceof`: 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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