Say I have my own class
public class MyObj { /* ... */ }
It has some attributes and methods. It DOES NOT implement equals, DOES NOT implement hashCode.
Once we call equals and hashCode, what are the default implementations? From Object class? And what are they? How the default equals will work? How the default hashCode will work and what will return? == will just check if they reference to the same object, so it's easy, but what about equals() and hashCode() methods?
There are default implementations of
equals()
andhashCode()
in Object. If you don't provide your own implementation, those will be used. Forequals()
, this means an==
comparison: the objects will only be equal if they are exactly the same object. ForhashCode()
, the Javadoc has a good explanation.For more information, see Effective Java, Chapter 3 (pdf), item 8.
Yes, from
Object
class since your class extends Object implicitly.equals
simply returnsthis == obj
.hashCode
implementation is native. Just a guess - it returns the pointer to the object.IBM's developerworks says:
However, to be sure of the exact implementation details for a particular vendor's Java version it's probably best to look as the source (if it's available)
If you do not provide your own implementation, one derived from Object would be used. It is OK, unless you plan to put your class instances into i.e. HashSet (any collection that actually use hashCode() ), or something that need to check object's equality (i.e. HashSet's contains() method). Otherwise it will work incorrectly, if that's what you are asking for.
It is quite easy to provide your own implementation of these methods thanks to HashCodeBuilder and EqualsBuilder from Apache Commons Lang.
From
Object
in one of the JVM implementations:In both cases it's just comparing the memory addresses of the objects in question.
Yes, the default implementation is Object's (generally speaking; if you inherit from a class that redefined equals and/or hashCode, then you'll use that implementation instead).
From the documentation:
equals
hashCode