如果我比较A的2个实例但没有覆盖equals方法,是否可以获得预期的结果?
这取决于您的期望:)
默认实现将为您提供 引用相等性-换句话说,当您比较两个引用时,
equals仅当它们是对同一对象的引用时才返回true。
通常,您将重写
equals以实现“值相等”,在这种情况下,两个不同的对象通常被认为具有相等的字段值,因此被视为相等。相等的确切含义将取决于您的设计-例如,这两个对象仍然可以通过其他方式区分。
如果覆盖
equals,你应该 _也_覆盖
hashCode到与其保持一致
equals,例如,如果
a.equals(b)是真的,那么
a.hashCode() ==b.hashCode()。这将允许您将类的实例用作基于哈希的集合(例如
HashMap)中的键,以便您可以基于与原始键 _相同_的键来查找值,而不必使用对精确键的引用。原始关键对象。



