为什么Sun指定String.hashCode()实现?

Gil*_*ili 8 java string hashcode backwards-compatibility

关于依赖当前实施是否安全似乎存在争议,String.hashCode()因为从技术上讲,它是由规范(Javadoc)保证的.

  1. 为什么Sun String.hashCode()在规范中指定了实现?
  2. 为什么开发人员需要依赖hashCode()的特定实现?
  3. 太阳为什么如此害怕,如果String.hashCode()将来改变,天空会下降?(这可能由#2解释)

Rob*_*Rob 8

依赖于hashCode()的特定实现的原因是它是否被持久存储到数据库,文件或任何其他存储介质中.如果在散列算法发生变化时读回数据,则会发生坏事(tm).您可能会遇到意外的哈希冲突,更令人担忧的是,无法通过哈希找到某些东西,因为哈希在持久化和"现在"之间的数据之间发生了变化.

事实上,这几乎解释了#3点=)

点#1的原因可能是"允许互操作性".如果hashCode实现被锁定,则可以非常安全地在不同的Java实现之间共享数据.即,无论实现如何,给定对象的散列总是相同的.