我们的哈希规则认为,两个相同的对象必须哈希值也相同,HashCode 的值可以帮助两个对象的相等比较。进而如果我们用equals判断两个对象是否相同时,我们应该了解到两个对象创建之后的比较方法。
在“==”和 equals 二者,在内存中,== 号对于基本数据类型比较的是两个数值是否相同,对于引用数据比较的是内存中的地址,而我们在实际数据的比较时,多数情况下比较的都是引用数据类型,而引用数据类型不同于基本数据类型的数据常常在常量池获得,我们在创建用数据类型对象时,比较的是内存中的地址,这种情况下就会出现值相同地址不同的情况.所以用equals方法可以很好的解决比较的问题。
而多数情况下,我们不清楚我们创建的对象该如何进行比较,所以我们常常需要重写Object类中的equals方法。明确比较的数据是否相同。
实际上,hashcode是根据对象的内存地址经哈希算法得来的,想要两个数据相同,那么必须hash值也相同,这一点最直观的例子,在HashMap中就可以完美体现,所以我们需要根据equals的比较方法,重写HashCode方法,确保值不同时哈希值也不同,相同时,Hash值也相同。
这就很好的解释了,为什么这两个方法常常要一起重写的原因。