63

如果不覆盖该hashCode方法,那么默认实现是hashCode什么?

4

3 回答 3

53

然后这个类继承hashCode自它的一个祖先。如果它们都没有覆盖它,则使用Object.hashCode

文档

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

所以默认实现是特定于 JVM 的

于 2013-02-28T08:28:16.807 回答
15

默认情况下,未覆盖的方法继承自Object.

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

一个小例子:

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
于 2013-02-28T08:35:00.530 回答
5

Object.hashcode() 是本机方法。

public native int hashCode();

这意味着它是在特定于平台的代码中实现的,并作为本机方法公开。

相同的代码将是编译后的代码,JDK 中不可用

这个现有的问题可能会提供更多信息。

于 2013-02-28T08:34:21.943 回答