什么是`hashCode`的默认实现?
如果没有重写hashCode
方法,那么hashCode
的默认实现是什么?
然后这个类从它的一个祖先inheritancehashCode
。 如果它们没有覆盖它,则使用Object.hashCode 。
从文档 :
尽可能多地合理实用,由类Object定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
所以默认的实现是JVM特定的
默认情况下,未覆盖的方法从Object
inheritance。
如果您查看该方法的文档,则返回值是[...] 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提供
这个存在的问题可能会提供更多信息