根据Java文档,String对象的hash code计算为:



为什么将31用作乘数?

我知道乘数应该是一个相对较大的素数。那么为什么不29或37甚至97?

最佳答案

根据约书亚·布洛赫(Joshua Bloch)的Effective Java(一本值得推荐的书,由于对stackoverflow的不断提及,我买了这本书):



(摘自第3章第9项:在覆盖等号时始终覆盖哈希码,第48页)

09-28 10:03