Java 笔记

By | 2021年12月31日

eqauls 和 hashCode

Java对于eqauls方法和hashCode方法是这样规定的:

1、如果两个对象 eqauls 相同,那么它们的 hashCode 值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定 eqauls 相同
推论:
3、如果两个对象不equals,他们的hashcode有可能相等。
4、如果两个对象hashcode不相等,他们一定不equals。

hashcode这个方法是用来鉴定2个对象是否相等的。一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以 认为只要姓名和性别相等,那么就说这2个对象是相等的。 hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode 这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相 当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。

我们一般在覆盖equals的同时也要 覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。 要从物理上判断2个对象是否相等,用==就可以了。

发表评论

您的电子邮箱地址不会被公开。