为什么没有" Equalable" Java界面?

时间:2015-02-24 10:38:59

标签: java

equals的{​​{1}}方法仅比较地址:

Object

我认为它在大多数情况下都没用,我们可能会覆盖它。但对于我开发的大多数类,我没有覆盖public boolean equals(Object obj) { return (this == obj); } 方法,因为我根本不会使用它...

所以我想知道,为什么Java语言设计师将equals方法放在equals中? 为什么没有像Object这样的“Equalable”界面?

3 个答案:

答案 0 :(得分:4)

Java系统类使用equals()方法,例如在HashMap中。由于每个对象都可以存储在HashMap中,因此每个对象都需要一个equals()方法。默认实现就足够了。

这只是一个例子。有很多地方叫equals()。

答案 1 :(得分:4)

身份提供了平等的通用定义。每个对象都等于自己。它在逻辑上可能与某些不属于自身的对象相同或不同。如果是,请覆盖equalshashCode。如果没有,请继承Object个。

这与Comparable非常不同。可能由类表示的结构可能缺少任何有意义的总顺序 - 考虑复数。

答案 2 :(得分:1)

如果Java的接口“Equalable”类似于“Comparable”接口,则不必将它包含在Java中的每个对象中,因此在将对象添加到Collection等中时可能会出现新问题。

当然哈希码+等于合同范式将被打破

请从有效的Java

中查看此链接

http://www.ideyatech.com/2011/04/effective-java-equals-and-hashcode/