【1.JDK底层源码剖析】1.6hashcode是怎么生成的

在 Java 中,hashCode() 是一个用于生成对象哈希码(整数)的方法,定义在 java.lang.Object 类中。哈希码的主要作用是在哈希表数据结构(如 HashMapHashSet)中快速定位对象。

一、默认实现(未重写时)

public native int hashCode();
  • 基于内存地址:默认实现通常返回对象内存地址的整数表示(不同 JVM 实现可能不同)
  • 特性
    • 同一对象多次调用返回相同值
    • 不同对象通常返回不同值(不绝对)
  • 问题:内容相同的对象可能哈希值不同

二、重写规则(重要!)

当重写 equals()必须 重写 hashCode(),遵守:

  1. 一致性:对象未修改时,多次调用返回相同值
  2. 相等性a.equals(b) == truea.hashCode() == b.hashCode()
  3. 不等性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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值