什么是`hashCode`的默认实现? [重复](What is the default imp

2019-07-20 17:31发布

这个问题已经在这里有一个答案:

  • 什么是对象的散列码如果hashCode()方法不重写? 11个回答

如果不重写hashCode方法是什么的缺省实现hashCode

Answer 1:

那么这个类继承hashCode从它的祖先之一。 如果他们不将其覆盖,然后是Object.hashCode使用。

从文档 :

尽可能合理地实用,由Object类定义的hashCode方法不会返回针对不同的对象不同的整数。 (这一般是通过将该对象的内部地址转换成一个整数来实现的,但不是由的JavaTM编程语言不需要这种实现技巧。)

所以默认实现JVM专用



Answer 2:

默认情况下,不重写的方法是从继承的Object

如果你看一下该方法的文档,返回值是“ [...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...]) ”。 在该方法java.lang.Object声明为本地,这意味着实现是由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


Answer 3:

是Object.hashCode()是一个本机方法。

public native int hashCode();

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

对于相同的代码将是编译的代码,而不是提供withing JDK

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



文章来源: What is the default implementation of `hashCode`? [duplicate]
标签: java hashcode