• == 是运算符, equals 是Object类定义的一个方法
  • == 可以用于基本数据类型和引用类型的比较, equals只能用于引用类型

Object类的equals 默认就是 ==
image.png

  • equals如果不重写,equals 就是 ==

    重写equals为什么还要重写hashCode?

  • 重写equals可以让我们自己定义两个对象是否相等的条件

  • 重写hashCode之后,我们可以自定义哈希码的生成规则

Object定义的hashCode()生成的哈希码能保证同一个类的对象的哈希码一定是不同的,但是不同类可能是相同的。
image.png

当equals返回true的时候,我们在逻辑上可以认为是同一个对象,但是查看哈希码,发现哈希码不同,和equals返回的结果违背。
Object中定义的hashCode方法生成的哈希码跟对象本身的属性值是无关的,重写hashCode可以将对象的内容查询转换为根据索引的查询。
HashMap借助equals和hashCode方法来完成数据的存储