equals

Java语言规范对equals方法的要求有如下:

  1. 自反性——x.equals(x)为真
  2. 对称性——x.equals(y)与y.equals(x)返回结果相同
  3. 传递性——x.equals(y)且y.equals(z)则x.equals(z)
  4. 一致性——x.equals(y)结果要一直一样
  5. 对于任意的非空引用值x,x.equals(null)必须返回假。

编写一个完美的equals方法的步骤:(需要注意的是,传入的参数类型应该是Object类型,而不是相应的类类型,否则无法覆盖Object中的equals方法)

  1. 判断是否为相同的引用
  2. 判断传入的object是否为null
  3. 比较是否为同一个类,使用getClass或者instanceOf(当所有子类的语义一致时)
  4. 将传入的object转换为对应的类类型
  5. 进行相应的变量域比较

一般地,覆盖equals方法也需要覆盖hashCode方法,主要是为了一些集合类中的正常使用

你可能感兴趣的:(equals)