根据Java文档,String
对象的hash code计算为:
为什么将31用作乘数?
我知道乘数应该是一个相对较大的素数。那么为什么不29或37甚至97?
最佳答案
根据约书亚·布洛赫(Joshua Bloch)的Effective Java(一本值得推荐的书,由于对stackoverflow的不断提及,我买了这本书):
(摘自第3章第9项:在覆盖等号时始终覆盖哈希码,第48页)
根据Java文档,String
对象的hash code计算为:
为什么将31用作乘数?
我知道乘数应该是一个相对较大的素数。那么为什么不29或37甚至97?
最佳答案
根据约书亚·布洛赫(Joshua Bloch)的Effective Java(一本值得推荐的书,由于对stackoverflow的不断提及,我买了这本书):
(摘自第3章第9项:在覆盖等号时始终覆盖哈希码,第48页)