Question

I was reading JLS, The Class Object and according to it

The method equals defines a notion of object equality, which is based on value, 
not reference, comparison.

but when I opened the Declaration of equals method of Object class, which is:

public boolean equals (Object o) {
    return this == o;
}

But here, reference is checked with Reference equality operator(==), how this Declaration is matching the specification?

Was it helpful?

Solution

See the javadoc for Object's .equals():

The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).

Which means, if you don't override it in your class, this is what you get.

The JLS is still right about what it says; however it is up to implementations to define their own .equals() contract.

(and of course, if you override .equals(), you should override .hashCode() as well)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top