hashCode()和equals()方法
#程序员 #java #面试
1. hashCode() 方法:
作用:计算对象的哈希码,得到一个整数值,通常用来确定对象在哈希表等数据结构中的存储位置,提高查找和插入的效率。
计算规则:通常基于对象的属性,不同的对象可能产生相同的哈希码,即哈希冲突。
2. equals() 方法:
作用:比较两个对象是否在逻辑上相等,默认使用对象的引用地址进行比较。
重写:可以根据对象的属性重写equals()方法,实现自定义的相等比较逻辑。
3. 重写equals()方法的注意事项:
自反性(Reflexive):对于任何非空引用对象 x,x.equals(x) 应该返回 true。
对称性(Symmetric):对于任何非空引用对象 x 和 y,如果 x.equals(y) 返回 true,则 y.equals(x) 也应该返回 true。
传递性(Transitive):对于任何非空引用对象 x、y 和 z,如果 x.equals(y) 返回 true,且 y.equals(z) 也返回 true,则 x.equals(z) 也应该返回 true。
一致性(Consistent):对于任何非空引用对象 x 和 y,多次调用 x.equals(y) 应该始终返回相同的结果,前提是对象上的信息没有被修改。
对 null 的比较(Comparison to null):对于任何非空引用对象 x,x.equals(null) 应该返回 false。
4. 哈希码和equals方法的关联:
在重写equals()方法时,通常也需要同时重写hashCode()方法,以保证相等的对象具有相同的哈希码。
在使用哈希表等数据结构时,先根据哈希码确定存储位置,再使用equals()方法处理可能的哈希冲突。
用equals()判等的两个对象的哈希码一定相等,用equals()判不等的两个对象的哈希码不一定不相等。
5. 重写场景:
需要在自定义对象之间进行比较或存储在哈希集合中时,需要重写hashCode()和equals()方法。
常见场景:实现缓存、数据唯一性校验或自定义数据结构时,重写这些方法有助于控制对象的比较和存储行为。