It’s a common topic In java interviews. And these two methods are
always common to any class you write in Java. So let’s know them in and out.
boolean equals(Object
obj) and int hashCode() are two methods implemented in Object class with
several other methods. In Java every class implicitly inherit Object class so every class has these methods. Equals method check the reference is holding
same object or not.
MyClass obj1 = new MyClass();
MyClass obj2 = 0bj1;
Then obj1.equals(obj2) returns true.
MyClass obj3 = new MyClass();
In this case obj1.equals(obj3) will return false.
It means original equals method check whether two reference contain
same object or not. If two object are logically similar, for ex like wrapper
class Integer, Boolean etc we need to override equals method.
Boolean b1 = true;
Boolean b2 = true;
b1.equals(b2) will return true.
To overload equals method programmer may chose to compare field
by filed.
Public class Employee
{
Integer employeeId;
String name;
public boolean equals(Object obj)
{
if (obj != null && obj instanceof Employee)
{
Employee obj2 = (Employee) obj;
return (obj2.getEmployeeId() == null ? this.employeeID == null :
obj2.getEmployeeId().equals(this.employeeID))
&& (obj2.getEmployeeName() == null ? this.employeeName == null :
obj2.getEmployeeName().equals(this.employeeName));
}
return false;
}
Hascode method always return integer. Any two object equals
return true always return same hashcode. But its not necessary if two object produce
same hashcode need to be equal.
Now here is the million dollar question if we override equals
method do we need to override hashcode method. The answer is yes. We need to override
hashcode method. It should satisfy two condition every distinct object produce different
hashcode consistently and equals object will produce same hashcode.
Hashcode is important when we use HashTable, HashSet or
HashMap in collections api. If we don’t construct the object in the above way,
these collections may not work properly, performance can deteriorate.
So bottom line is always override hashcode when you override
equals. J