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

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

    最佳答案

    通常,您的问题的答案是"is",但是...

  • .equals(...)将只比较写入的内容以进行比较,不会多也不会少。
  • 如果一个类未覆盖equals方法,则它默认为已覆盖此方法的最接近的父类的equals(Object o)方法。
  • 如果没有父类提供重写,则它默认为最终父类Object中的方法,因此您只剩下Object#equals(Object o)方法。根据对象API,这与==相同;也就是说,当且仅当两个变量都引用相同的对象(如果它们的引用是相同的)时,它才返回true。因此,您将测试对象相等性而不是功能相等性
  • 如果您覆盖hashCode,请务必记住覆盖equals,以免“违约”。根据API,如果两个对象hashCode()方法返回的结果必须相等,则它们的equals方法必须相同。相反不一定是正确的。
  • 09-10 08:31
    查看更多