java hashcode

 Sun 04 July 2021   In 编程   :)

hashcode

根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值。可能和存储地址有一定关联,但不一定就是地址。

默认情况下,hashCode方法是将对象的存储地址进行映射。 两个对象的存储地址不同也有可能得到相同的hashcode值(几率很小)

  • 比较

hashCode不同,那么肯定是不同的对象 hashCode相同,不一定是相同对象

所以需要重写hashCode方法,让equals方法和hashCode方法始终在逻辑上保持一致性。

  • 底层实现 (有多种模式:五种,比如随机[默认]、自增、恒定、基于指针地址)

对于没有覆盖hashcode()方法的类,实例每次调用hashcode()方法,只有第一次计算哈希值,之后哈希值会存储在对象头的 标记字(MarkWord) 中。

默认为模式5: Marsaglia's xor-shift 随机数生成法