如果不覆盖该hashCode
方法,那么默认实现是hashCode
什么?
3 回答
然后这个类继承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 [...])
”。in 中的方法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
Object.hashcode() 是本机方法。
public native int hashCode();
这意味着它是在特定于平台的代码中实现的,并作为本机方法公开。
相同的代码将是编译后的代码,JDK 中不可用
这个现有的问题可能会提供更多信息。