如果一个类没有重写
hashCode
方法,那么默认实现的hashCode
是什么?hashCode
。如果没有一个祖先重写它,那么将使用 Object.hashCode。因此默认实现取决于 JVM。尽可能实际,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。(通常通过将对象的内部地址转换为整数来实现,但是这种实现技术并非 JavaTM 编程语言所必需的。)
Object.hashCode()
的实现看起来像什么? - John ThreepwoodObject
继承。如果查看该方法的文档,返回值为“[...]独特的整数对于不同的对象。(这通常是通过将对象的内部地址转换为整数来实现[...])”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
toString()
使用hashCode()
值的十六进制表示法:运行System.out.println(o1)
会打印出类似于以下内容:java.lang.Object@7a5e1077
Object.hashcode()是一个本地方法。
public native int hashCode();
这意味着它是在特定平台的代码中实现的,并作为本地方法公开。
相应的代码将是编译后的代码,不会在JDK中提供。
这个现有问题可能会提供更多信息。
return Objects.hash(this.field1, this.field2, this.field3, etc.);
。 - NoName