很明显,当你处理不可变的值对象(如map键、需要在包含它们的对象之间进行比较的强类型字段值等)时,
但除了值对象之外,你有多少可能会拥有两个独立构造的实例,并希望它们相等的情况呢?
对我来说很难想象出一个现实场景,在这种情况下引用相等性并不能得到你想要的结果;而在那些特定情况下,似乎一个特定于场景的等价方法(例如
在非值类型中使用
equals()
(当然还有hashCode()
)是很有价值的。但除了值对象之外,你有多少可能会拥有两个独立构造的实例,并希望它们相等的情况呢?
对我来说很难想象出一个现实场景,在这种情况下引用相等性并不能得到你想要的结果;而在那些特定情况下,似乎一个特定于场景的等价方法(例如
isEquivalentTo(Foo)
而不是equals(Object)
)会更加安全,特别是对于可变对象而言。在非值类型中使用
equals()
的用例是什么?
final
,以确保该类型的所有类具有与Object.equals()
和Object.hashCode()
相同的语义。那不是你所问的 :-) - RaedwaldObject
的默认行为? :) - David Molesequals()
应该是final
,而对于补充类别则可以被重写? - FoolishSeth