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

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

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

从文档 :

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

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

默认情况下,未覆盖的方法从Objectinheritance。

如果您查看该方法的文档,则返回值是[...] 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()值的hex表示forms用于toString()的默认实现中,方法如下:运行System.out.println(o1)

 java.lang.Object@7a5e1077 

Object.hashcode()是一个本地方法。

public native int hashCode();

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

相同的代码将是一个编译的代码,不能用JDK提供

这个存在的问题可能会提供更多信息