比较对象相等

比较对象相等 #

对于8种基本数据类型,==比较的是操作数的值之间的关系
其余一切皆是对象,==比较的是内存地址
由Object继承来的equals方法比较的是内存地址

Object规范约定:

  • 如果两个对象通过equals方法比较是相等的,则hashcode方法结果值必须相等
  • 如果两个对象通过equals方法比较不相等,则不要求hashcode方法结果相等 当一个程序执行过程中,equals方法没有修改任何信息,同一个对象上重复调用hashcode方法,必须返回相同值
    两个应用互相调用,则hascode可以不一致。

这意味着,当我们要重写equals方法时,必须重写hashcode方法。
否则可能违反:同一对象的hashcode值必须相等的约定
会使得一些使用hashcode的类使用出现问题
如HashMap,存入时会调用类自身的hashcode方法得到hashcode;