Home > Java > javaTutorial > body text

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

Barbara Streisand
Release: 2024-11-25 03:38:11
Original
638 people have browsed it

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

Preferred Usage of getClass() vs. instanceof in Generating .equals()

When utilizing Eclipse's code generator for .equals() and .hashCode(), you may encounter the option to use 'instanceof' for type comparison or .getClass(). The default selection is .getClass(), but this article examines whether there are any advantages to using .getClass() over instanceof.

Comparison Without instanceof:

if (obj == null)
  return false;
if (getClass() != obj.getClass())
  return false;
Copy after login

Comparison Using instanceof:

if (obj == null)
  return false;
if (!(obj instanceof MyClass))
  return false;
Copy after login

Typically, it is advisable to use the instanceof option and remove the "if (obj == null)" check, as null objects will inevitably fail instanceof. However, is this practice inherently erroneous?

Arguments for instanceof

Renowned Java expert Josh Bloch endorses this approach, citing the following reasoning:

  • Using getClass() restricts object equality to only those belonging to the same class and run-time type.
  • If a class is extended with innocuous methods, objects of the subclass and superclass may erroneously be considered unequal despite identical essential properties.
  • This violates the Liskov substitution principle, potentially leading to unexpected behavior.
  • Java's collection frameworks (e.g., HashTable) heavily rely on the equals method. Using .getClass(), an object from the superclass may not be retrievable from a hash table when queried with a subclass instance due to their perceived inequality.

Additional Resources

  • [SO answer](https://stackoverflow.com/questions/2810849/what-is-the-performance-complexity-of-using-instanceof-keyword-in-java)
  • [Effective Java chapter 3](https://books.google.com/books?id=XY6a0H0G7LsC&pg=SA3-PA34&lpg=SA3-PA34&dq=Josh Bloch instanceof getClass equals&source=bl&ots=1P2j4a8S-Q&sig=ACfU3U0pWgTLs2MNGhf5Nq4Giq6hYH8MgQ&hl=en)

The above is the detailed content of `getClass()` vs. `instanceof` in Java\'s `.equals()` Method: Which is Better?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template