在 Java 中,hashCode()
是一个用于生成对象哈希码(整数)的方法,定义在 java.lang.Object
类中。哈希码的主要作用是在哈希表数据结构(如 HashMap
、HashSet
)中快速定位对象。
一、默认实现(未重写时)
public native int hashCode();
- 基于内存地址:默认实现通常返回对象内存地址的整数表示(不同 JVM 实现可能不同)
- 特性:
- 同一对象多次调用返回相同值
- 不同对象通常返回不同值(不绝对)
- 问题:内容相同的对象可能哈希值不同
二、重写规则(重要!)
当重写 equals()
时 必须 重写 hashCode()
,遵守:
- 一致性:对象未修改时,多次调用返回相同值
- 相等性:
a.equals(b) == true
➜a.hashCode() == b.hashCode()
- 不等性:
a.equals(b) == false
➜ 哈希码可以相同(哈希冲突)
三、常见生成方法
1. 手动实现(Apache Commons 风格)
@Override
public int hashCode() {
int result = 17; // 非零初始值
result = 31 * result + intField; // 基本类型
result = 31 * result + (boolField ? 1 : 0); // boolean
result = 31 * result + Float.