首页 > 图灵资讯 > 技术篇>正文
Java中对象的哈希码是如何生成的?
2024-04-12 14:20:25
java 对象的哈希码通过以下公式生成:h = (h
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
它们是不同的对象,但是因为它们具有相同的属性,所以哈希码是相同的。
以上是Java中对象的哈希码是如何生成的?详情请关注图灵教育其他相关文章!