equals
的{{1}}方法仅比较地址:
Object
我认为它在大多数情况下都没用,我们可能会覆盖它。但对于我开发的大多数类,我没有覆盖public boolean equals(Object obj) {
return (this == obj);
}
方法,因为我根本不会使用它...
所以我想知道,为什么Java语言设计师将equals
方法放在equals
中?
为什么没有像Object
这样的“Equalable”界面?
答案 0 :(得分:4)
Java系统类使用equals()
方法,例如在HashMap中。由于每个对象都可以存储在HashMap中,因此每个对象都需要一个equals()方法。默认实现就足够了。
这只是一个例子。有很多地方叫equals()。
答案 1 :(得分:4)
身份提供了平等的通用定义。每个对象都等于自己。它在逻辑上可能与某些不属于自身的对象相同或不同。如果是,请覆盖equals
和hashCode
。如果没有,请继承Object
个。
这与Comparable非常不同。可能由类表示的结构可能缺少任何有意义的总顺序 - 考虑复数。
答案 2 :(得分:1)
如果Java的接口“Equalable”类似于“Comparable”接口,则不必将它包含在Java中的每个对象中,因此在将对象添加到Collection等中时可能会出现新问题。
当然哈希码+等于合同范式将被打破
请从有效的Java
中查看此链接http://www.ideyatech.com/2011/04/effective-java-equals-and-hashcode/