String.hashCode()是否可以跨VM,JDK和OS移植?

cle*_*tus 6 java hashcode

最近出现了一个有趣的问题.我们遇到了一些hashCode()用作MD5加密的salt源的代码,但是这引出了一个问题:将hashCode()在不同的VM,不同的JDK版本和操作系统上为同一对象返回相同的值吗?即使它没有保证,它现在在任何时候都有变化吗?

编辑:我的意思是,String.hashCode()而不是更一般Object.hashCode(),当然可以被覆盖.

Joh*_*kin 8

不.来自http://tecfa.unige.ch/guides/java/langspec-1.0/javalang.doc1.html:

hashCode的一般契约如下:

  • 每当在执行Java应用程序期间多次在同一对象上调用它时,hashCode必须始终返回相同的整数.整数可以是正数,负数或零.但是,此整数不必从一个Java应用程序到另一个Java应用程序保持一致,或者从应用程序的一次执行到同一应用程序的另一次执行保持一致.[...]