Java中hashCode()与equals()的常见错误及解决方案
数组字段的hashCode()实现错误
在实现hashCode()
方法时,必须严格遵守方法契约:根据equals()
方法判定相等的两个对象必须返回相同的哈希码值。若违反此契约,当对象被存入基于哈希的集合(如HashSet或HashMap)时,将导致难以排查的异常行为。典型场景是:两个本应被去重的相等对象可能同时存在于HashSet中。
Java 7前的手动实现方式
在Java 7之前,实现hashCode()
需要手动计算各字段哈希值并通过乘加运算(通常使用质数31)混合结果,且需特别处理可能为null的字段。以下是一个包含三个字段的类实现示例:
class Person {String name;int