JDK8 的默认hashCode的计算方法是通过和当前线程有关的一个随机数+三个确定值,运用Marsaglia’s xorshift scheme随机数算法得到的一个随机数

    hashCode == 0
    此类方案返回一个Park-Miller伪随机数生成器生成的随机数
    OpenJdk 6 &7的默认实现。

    • hashCode == 1
      此类方案将对象的内存地址,做移位运算后与一个随机数进行异或得到结果


    • hashCode == 2
      此类方案返回固定的1
    • hashCode == 3
      此类方案返回一个自增序列的当前值
    • hashCode == 4
      此类方案返回当前对象的内存地址

    可以通过在JVM启动参数中添加-XX:hashCode=4,改变默认的hashCode计算方式。