Java中对象的哈希码是如何生成的?
作者:OpenWorld
时间:2024-04-23
浏览:0
Java对象的哈希码通过以下公式生成:h=(h<<5)-h+x对于引用类型,哈希码基于其对象的哈希码列表生成:hashCode=(hashcode131)+(hashcode231)+...+(hashcodeN*31)实战案例:Person类根据name和age属性哈希码计算哈希码,即使p1和p2是不同的对象,但由于它们具有相同的属性,因此哈希码是相同的。
Java 对象的哈希码通过以下公式生成:h = (h << 5) - h + x对于引用类型,哈希码基于其对象的哈希码列表生成:hashCode = (hashcode1 31) + (hashcode2 31) + ... + (hashcodeN * 31)实战案例:Person 类根据 name 和 age 属性哈希码计算哈希码,即使 p1 和 p2 是不同的对象,但由于它们具有相同的属性,因此哈希码是相同的。

Java 中对象的哈希码是如何生成的?
哈希码是存储在 Java 对象内部的 int 值,用于快速标识和查找对象。它由以下公式生成:
hashCode = (h << 5) - h + x
其中:
- h 是先前哈希码的左移 5 位后与原哈希码求和的结果(初值为 0)
- x 是对象属性值或指针的哈希码
对于基本类型,哈希码直接存储在对象中,如:
int i = 10; System.out.println(i.hashCode()); // 输出:10
对于引用类型,哈希码基于其对象的哈希码列表生成,其中:
hashCode = (hashcode1 * 31) + (hashcode2 * 31) + ... + (hashcodeN * 31)
其中 31 是素数,称为“魔数”,有助于减少哈希碰撞。
实战案例
考虑以下 Person 类:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
int hash = 0;
if (name != null) {
hash += name.hashCode() * 31;
}
hash += age * 31;
return hash;
}
}此类覆盖了 hashCode() 方法以生成定制的哈希码,根据 name 和 age 属性哈希码计算。
Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);
System.out.println(p1.hashCode() == p2.hashCode()); // 输出:true在上面的案例中,尽管 p1 和 p2 是不同的对象,但由于它们具有相同的属性,因此哈希码是相同的。
作者最新文章
三星 Galaxy A08 渲染图曝光:Helio G99 芯片与 6000mAh 电池配置解析
2026-09-08 17:14
OPPO Find X10 Pro Max 影像规格详解:三颗2亿像素镜头与全焦段8K视频能力
2026-09-08 16:41
PDF转HTML在线转换器怎么选?转换后网页排版怎么查?
2026-09-04 11:02
AE教程书籍挑选指南:零基础、动效与合成方向实战标准
2026-09-02 13:31
教程书籍使用SAI软件Logo要单独授权吗:商标引用与出版合规要点
2026-09-02 11:50
上一篇:
射雕静修点位置
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































