How to properly override equals.() method in Java

Posted on Aug 19, 2018 in Tutorial • 1 min read

When creating my first Java class, I was trying to override the equals() method the way I created other methods in my own class. I passed in an other object of my class and compared it with some normal if statements. It failed.

It turns out there are specific rules to follow when overriding a Java method.

In the case of equals(), the most important thing is that it must take an Object obj (an instance of the Java Object class) as parameter instead of a MyClass other.

public boolean equals(Object obj) {
    ...
}

It's good practise to first check if obj is null.

public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
}

Then check if this object is an instance of MyClass. (You can also use the instanceof operator)

public boolean equals(Object obj) {
    ...
    if (!MyClass.class.isAssignableFrom(obj.getClass())) {
        return false;
    }
}

Finally, if it passes the checks, cast it into MyClass with a final statement and you can carry on with the checks you with to perform.

public boolean equals(Object obj) {
    ...
    final MyClass other = (MyClass) obj;
    ...
}