所有JVM /系统中的Java,Object.hashCode()结果常量?

Mik*_*ike 7 java hashcode

Object.hashCode()在同一个对象的所有JVM实现上,required 的输出是否相同?

例如,如果"test".hashCode()返回11.4,它是否可能2在1.6上返回运行.或者如果操作系统不同,或者实例之间存在不同的处理器架构,该怎么办?

Phi*_*hil 17

不可以.hashCode在JVM实现之间甚至在同一JVM上的程序的不同执行之间,输出可能会发生变化.

但是,在您给出的具体示例中,值的实际值"test".hashCode() 是一致的,因为hashCodefor String对象的实现是API的一部分String(请参阅java.lang.String的Javadocs其他SO帖子).


Jim*_*son 6

来自API

hashCode的一般契约是:

  • 每当在执行Java应用程序期间多次在同一对象上调用它时,hashCode方法必须始终返回相同的整数,前提是不修改对象上的equals比较中使用的信息.从应用程序的一次执行到同一应用程序的另一次执行,该整数不需要保持一致.
  • 如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果.
  • 如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果.但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能.

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)

  • @finnw:是的; hashCode不需要在相同应用程序的同一系统上的相同版本的不同*运行*之间返回相同的值,更不用说跨不同版本或不同系统或不同应用程序. (5认同)