Significance of equals and hashCode methods of the Object class

equals()

Method equals check if two objects are equal.

String class and most collection classes overrides equal to check if two objects are meaningfully equal, which means, if two different string objects have the same value.

The equals method for class Object will return true, for any non-null reference values x and y, if x and y refer to the same object. 

 

hashCode()

Method hashCode returns a hash code value for the object.

This method is supported for the benefit of hash tables such as those provided by HashMap.

The hashCode method is usually used along with equals.

For more details on hashing, you can refer to http://javajee.com/hashing-basics.

 

General contract of hashCode method

The hashCode method has a general contract as given below:

  1. Whenever hashCode method is invoked on the same object more than once during one execution of a Java application, it should return the same integer, provided no information used in equals comparisons on the object is modified.

  2. If two objects are equal according to the equals(Object) method, then the hashCode should also be same, as returned by the hashCode method for the two objects.

  3. If two objects are unequal according to the equals(java.lang.Object) method, then the hashCode may or may not differ. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

 

When to override hashCode and Equals

  • Equals need to be overriden if we want to compare if two objects are meaningfully same. For example, we can check if two different string objects have the same value.

  • According to the contract of hashCode, if two objects are equal, then their hashCode should also be same. So it is a good practice to override hashCode whenever we override equals.

    • Default implementation of hashCode() method in Object class uses the internal reference of the object and converts it into integer and returns it. When we override equals() and change the meaning of equality for an object then the same should be reflected by overriding the hashCode method. Or two equal objects according to equals() might have a different hashCode value, which is against the contract.

    • Hash code is primarily used in has based collections such as Hashtable, HashMap, HashSet etc.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) ArrayLists (1) Arrays (2) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (53) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (4) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (7) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (8) Javascript Frameworks (1) Java SE Professional (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) resources (1) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)