hashCode 的值是怎么生成的?对象内存地址吗? 您所在的位置:网站首页 hashCode方法一定会返回唯一的值 hashCode 的值是怎么生成的?对象内存地址吗?

hashCode 的值是怎么生成的?对象内存地址吗?

2024-06-14 08:57| 来源: 网络整理| 查看: 265

先看一个最简单的打印

System.out.println(new Object());

会输出该类的全限定类名和一串字符串:

java.lang.Object@6659c656

​@符号后面的是什么?是 hashcode 还是对象的内存地址?还是其他的什么值? ​

其实@后面的只是对象的 hashcode 值,16进制展示的 hashcode 而已,来验证一下:

Object o = new Object(); int hashcode = o.hashCode(); // toString System.out.println(o); // hashcode 十六进制 System.out.println(Integer.toHexString(hashcode)); // hashcode System.out.println(hashcode); // 这个方法,也是获取对象的 hashcode;不过和 Object.hashcode 不同的是,该方法会无视重写的hashcode System.out.println(System.identityHashCode(o));

输出结果:

java.lang.Object@6659c656 6659c656 1717159510 1717159510

那对象的 hashcode 到底是怎么生成的呢?真的就是内存地址吗? ​

本文内容基于 JAVA 8 HotSpot

hashCode 的生成逻辑

JVM 里生成 hashCode 的逻辑并没有那么简单,它提供了好几种策略,每种策略的生成结果都不同。 ​

来看一下 openjdk 源码里生成 hashCode 的核心方法:

static inline intptr_t get_next_hash(Thread * Self, oop obj) { intptr_t value = 0 ; if (hashCode == 0


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有