关于依赖 String.hashCode()
的当前实现是否安全似乎一直存在争论,因为从技术上讲,它由规范 (Javadoc) 保证。
- 为什么 Sun 在规范中指定
String.hashCode()
的实现? - 为什么开发人员需要依赖 hashCode() 的特定实现?
- Sun 为何如此害怕如果将来更改
String.hashCode()
天会塌下来? (这可能是由 #2 解释的)
最佳答案
依赖 hashCode() 的特定实现的一个原因是它是否曾经持久化到数据库、文件或任何其他存储介质中。 Bad Things(tm) 如果在散列算法发生变化时读回数据,就会发生这种情况。您可能会遇到意外的哈希冲突,更令人担忧的是,无法通过其哈希找到某些东西,因为哈希在持久化数据和“现在”之间发生了变化。
事实上,这也很好地解释了第 3 点 =)
第 1 点的原因可能是“允许互操作性”。如果 hashCode 实现被锁定,那么数据可以在不同的 Java 实现之间非常安全地共享。即,无论实现如何,给定对象的散列将始终相同。
关于java - 为什么 Sun 指定 String.hashCode() 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255675/