When do I need to override equals and hashcode methods?

equals, java

Solution

If I compare 2 instances of A without override the equals method, will I get expected result?

That depends on what you expect :)

The default implementation will give you reference equality - in other words, when you compare two references, `equals` will only return true if they're references to the same object.

You would normally override `equals` to implement "value equality" - where two distinct objects are deemed equal, usually by virtue of having equal field values themselves. The exact meaning of equality will depend on your design - the two objects could still be distinguishable in other ways, for example.

If you override `equals`, you should also override `hashCode` to be consistent with `equals`, such that if `a.equals(b)` is true, then `a.hashCode() == b.hashCode()`. This will allow instances of your class to be used as keys in hash-based collections (e.g. `HashMap`) so that you can look up a value based on a key which is equal to the original one, rather than having to use a reference to the exact original key object.

Problem

Possible Duplicate: Overriding equals and hashCode in Java If I have ``` class A { int x = 1; } ... A a1 = new A(); A a2 = new A(); a1.equals(a2); ``` If I compare 2 instances of A without override the equals method, will I get expected result?

Original source

Related problems