小编典典

Java中==和equals()有什么区别?

all

我想澄清一下我是否理解正确:

  • ==是引用比较,即两个对象都指向同一个内存位置
  • .equals()评估对象中值的比较

阅读 117

收藏
2022-03-03

共1个答案

小编典典

一般来说,您的问题的答案是“是”,但是......

  • .equals(...)只会比较它所写的比较,不多也不少。
  • 如果一个类没有覆盖 equals 方法,那么它默认equals(Object o)使用最近的父类的方法,该父类已经覆盖了这个方法。
  • 如果没有父类提供了覆盖,那么它默认为来自最终父类 Object 的方法,因此您只剩下该Object#equals(Object o)方法。根据 Object API,这与==; 也就是说, 当且仅当 两个变量都引用同一个对象时,如果它们的引用是一个且相同的,它才返回 true。因此,您将测试 对象相等 而不是 功能相等
  • hashCode如果您覆盖,请务必记住覆盖equals,以免“违反合同”。根据 API,如果两个对象的方法表明它们是等效的,则从hashCode()两个对象的方法返回的结果 必须 相同。equals反过来 不一定 是真的。
2022-03-03