Java 哈希代码方法是如何计算值的?

Java 哈希代码方法是如何计算值的?,java,Java,hashCode()方法返回一系列数字,但两个不同的对象可以有相同的结果。 那么这个函数是如何在内部计算这个值的呢? 这与内存大小写有关吗?计算中包含哪些元素?根据对象javadoc,hashCode方法可能会在某个时间点返回对象在内存中的地址 hashCode可以实现,也可以不实现为 对象在某个时间点的内存地址 请记住,使用equals方法比较两个或多个or对象是否相同时,此方法非常有用,但如果某些属性(例如PK)相同,则可以重写此方法以返回相同的哈希代码,尽管它们在内存中是不同的对象标识哈

hashCode()方法返回一系列数字,但两个不同的对象可以有相同的结果。 那么这个函数是如何在内部计算这个值的呢?
这与内存大小写有关吗?计算中包含哪些元素?

根据对象javadoc,hashCode方法可能会在某个时间点返回对象在内存中的地址

hashCode可以实现,也可以不实现为 对象在某个时间点的内存地址


请记住,使用
equals
方法比较两个或多个or对象是否相同时,此方法非常有用,但如果某些属性(例如PK)相同,则可以重写此方法以返回相同的哈希代码,尽管它们在内存中是不同的对象

标识哈希代码(即,
Object.hashCode()
和其他未重写该方法并提供其自身实现的类返回的值)是特定于实现的,具体是什么取决于JVM实现。您链接到的Javadoc是针对过时的Java 6版本的。即使是这个版本“这通常是通过将对象的内部地址转换为整数来实现的,但JavaTM编程语言不需要这种实现技术。”这句话在以后的版本中被删除。说“hashCode返回内存中对象的地址”是错误的。“事实上,垃圾收集器可以将对象重新分配到不同的地址,但其哈希代码将保持不变。您不应该使用哈希代码检查两个对象是否相同-改为使用
if(obj1==obj2)
if(obj1==obj2)
仅当您关心对象是否是同一物理对象时才起作用。如果您想要逻辑相等,则需要使用
o1.equals(o2)
。这些对象可能不是同一对象,但在逻辑上可能相等(例如字符串、数字等)。