如何重写hashcode和equals方法?
时间: 2024-05-23 16:10:48 浏览: 82
Java_重写equals()和hashCode()
在Java中,Object类中定义了hashCode()和equals()方法。hashCode()方法返回对象的散列码,equals()方法比较两个对象是否相等。如果你自定义了一个类,并且要在该类的实例之间进行比较和查找,那么你需要覆盖hashCode()和equals()方法。
重写hashCode()方法的步骤如下:
1. 声明一个整型变量result并初始化为一个非零的奇数。
2. 对于对象的每个关键域f,计算该域的哈希码c:
a. 如果该域是基本类型,则计算Type.hashCode(f),其中Type是相应基本类型的包装类。
b. 如果该域是一个对象引用,并且该类的equals方法通过递归调用equals的方式比较这个域,则同样递归调用这个域的hashCode()方法。如果这个域的值为null,则返回0。
c. 如果该域是一个数组,则需要对数组的每个元素进行上述操作,可以使用Arrays.hashCode方法。
3. 将计算得到的哈希码c合并到result中,可以使用result = 31 * result + c的方式。
4. 返回result。
重写equals()方法的步骤如下:
1. 首先判断传入的对象是否与当前对象引用相同,如果是则返回true。
2. 判断传入的对象是否为null或者与当前对象的类不同,如果是则返回false。
3. 将传入对象转换为当前类的类型。
4. 对于对象的每个关键域f,检查该域在传入对象和当前对象中的值是否相等。如果所有的关键域都相等,则返回true;否则返回false。
注意:当你重写equals方法时,也应该重写hashCode方法,以便在将对象放入哈希表等数据结构中时能够正确地工作。
阅读全文