hashCode返回的确切值是什么意思?

joh*_*831 2 java hashcode

我正在阅读Joshua Bloch的Effective Java 2nd Edition.

在这一段中,他提到:

Java平台库中的许多类(如String,Integer和Date)在其规范中包含hashCode方法返回的实际值作为实例值的函数.这通常不是一个好主意,因为它严重限制了您在将来的版本中改进哈希函数的能力.如果您未指定散列函数的详细信息并发现缺陷或发现更好的散列函数,则可以在后续版本中更改散列函数,确信没有客户端依赖散列函数返回的确切值.

任何人都可以通过'确切'的价值观分享他的意思.我看了一下String实现类,但仍然无法理解他的含义......

提前致谢!

Kay*_*man 7

来自String.hashCode():

返回此字符串的哈希码.String对象的哈希码计算为

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)

通过在javadoc中给出定义,人们可以编写完全依赖于散列算法的代码.在将来的版本中更改哈希算法会破坏该代码.

  • 通过在javadoc中写下它,它成为类的合同的一部分,因此根据该算法编写代码甚至是正确的. (4认同)