这个问题已经在这里有一个答案:
- 什么是对象的散列码如果hashCode()方法不重写? 11个回答
如果不重写hashCode
方法是什么的缺省实现hashCode
?
这个问题已经在这里有一个答案:
如果不重写hashCode
方法是什么的缺省实现hashCode
?
那么这个类继承hashCode
从它的祖先之一。 如果他们不将其覆盖,然后是Object.hashCode使用。
从文档 :
尽可能合理地实用,由Object类定义的hashCode方法不会返回针对不同的对象不同的整数。 (这一般是通过将该对象的内部地址转换成一个整数来实现的,但不是由的JavaTM编程语言不需要这种实现技巧。)
所以默认实现JVM专用
默认情况下,不重写的方法是从继承的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
是Object.hashCode()是一个本机方法。
public native int hashCode();
这意味着它在特定于平台的代码实现的,公开为本地方法。
对于相同的代码将是编译的代码,而不是提供withing JDK
这个存在的问题可能会提供更多的信息。