`hashCode`的默认实现是什么?

时间:2013-02-28 08:27:22

标签: java hashcode

如果没有覆盖hashCode方法,那么hashCode的默认实现是什么?

3 个答案:

答案 0 :(得分:47)

然后这个类从其祖先之一继承hashCode。如果没有覆盖它,则使用Object.hashCode

来自docs

  

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

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

答案 1 :(得分:15)

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

如果查看该方法的文档,返回值为“[...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...])”。 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

答案 2 :(得分:4)

Object.hashcode()是一种原生方法。

public native int hashCode();

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

相同的代码将是一个已编译的代码,不适用于JDK

existing question可能会提供更多信息。