so, according the "contracts", if I not wrong, if hashCode == hashCode, equal must be equals
it's the other way round:
if a.equals(b)
then a.hashCode() == b.hashCode()
The hash code is some kind of very reduced "coarse id" of the object. Obviously, an int can not hold in all cases all information needed to distinguish the object from all other instances for all time.
E.g. a simple class with two int member variables can have 2^64 different instanciations, but a single integer can only be used to distinguish between 2^32 of them.
[ December 20, 2005: Message edited by: Tilo Hemp ]