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?

有帮助吗?

解决方案

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)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top