“哈希码”的默认实现是什么?

2022-08-31 14:49:00

如果不重写该方法,则 的默认实现是什么?hashCodehashCode


答案 1

然后,此类继承自其祖先之一。如果它们中没有一个覆盖它,则使用Object.hashCodehashCode

文档中

尽管合理实用,但由类 Object 定义的 hashCode 方法确实为不同的对象返回不同的整数。(这通常是通过将对象的内部地址转换为整数来实现的,但 JavaTM 编程语言不需要这种实现技术。

因此,默认实现是特定于 JVM 的


答案 2

默认情况下,未重写的方法继承自 。Object

如果查看该方法的文档,则返回值为 “”。中的方法被声明为本机,这意味着实现由 JVM 提供,并且可能因运行时环境而异。[...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...])java.lang.Object

一个小例子:

Object o1 = new Object();
Object o2 = new Object();
System.out.println(o1.hashCode());
System.out.println(o2.hashCode());

打印(使用我的jdk6):

1660187542
516992923

顺便说一句,值的十六进制表示形式用于默认实现:运行打印类似于hashCode()toString()System.out.println(o1)

java.lang.Object@7a5e1077