首页 > Java > java教程 > 正文

Java中对象的哈希码是如何生成的?

PHPz
发布: 2024-04-11 18:45:01
原创
904 人浏览过

Java 对象的哈希码通过以下公式生成:h = (h

Java中对象的哈希码是如何生成的?

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() 方法以生成定制的哈希码,根据 nameage 属性哈希码计算。

Person p1 = new Person("John", 25);
Person p2 = new Person("John", 25);

System.out.println(p1.hashCode() == p2.hashCode()); // 输出:true
登录后复制

在上面的案例中,尽管 p1p2 是不同的对象,但由于它们具有相同的属性,因此哈希码是相同的。

以上是Java中对象的哈希码是如何生成的?的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!