如果没有覆盖hashCode
方法,那么hashCode
的默认实现是什么?
答案 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可能会提供更多信息。