生而自由

自由而无用的灵魂

在Java8中实现equals和hashCode

实现对Java中的自定义类型的比较是一个基础知识,即重载Object的equals和hashCode方法,且两个方法的行为要一致(即两个对象equals为true时hashCode也要一样,反之亦然)。

平常也没有太注意,最近用到了还感觉有点意思,遂怒水一文。

实现这个有几种方法:

  1. 手写,判空、比较每个属性;
  2. 在IDE中右击,generate...
  3. 手写,使用Guava中的Objects下的方法;
  4. 手写,使用Java8中的Objects下的方法;

使用第4种(其实第2种现在生成的代码也和第4种一致)方法生成的代码如下:

 

Guava和Java8的方法实现是比较一致的,在生成hashCode时都用了“31”作为算子,其代码如下:

选31的第一个原因是它是一个质数,第二所说是因为其便于被JVM所优化:31 * i = (i << 5) - i

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注