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.