这似乎是一个愚蠢的问题,但为什么我们覆盖equals方法而不是使用新名称创建一个新方法并使用它进行比较?
如果我没有覆盖equals那意味着两者都==等于检查两个引用是否都指向相同的内存位置?
aio*_*obe 57
这似乎是一个愚蠢的问题,但为什么我们覆盖
equals方法而不是使用新名称创建一个新方法并使用它进行比较?
因为所有的标准集合(ArrayList,LinkedList,HashSet,HashMap,...)使用equals决定是否两个对象相等时.
如果您发明了一种新方法,这些集合将无法了解它并且无法按预期工作.
以下内容非常重要:如果ArrayList调用Object.equals此调用之类的集合将在运行时解析为重写方法.因此,即使您发明了集合不知道的类,它们仍然可以equals在这些类上调用方法,例如.
如果我没有覆盖equals那意味着两者都
==等于检查两个引用是否都指向相同的内存位置?
是.执行Object.equals只是执行==检查.
你重写equals如果你使用的是依靠平等类,如HashMap,HashSet,ArrayList等...
例如,如果将类的元素存储在a中HashSet,则必须覆盖hashCode,equals如果希望元素的唯一性不是通过简单的引用相等来确定的.
是的,如果你不重写equals,默认的equals实现(在Object类中实现)与==.
除了主要原因,已经在其他答案中给出,考虑程序可读性.
如果你覆盖equals,hashCode任何阅读你的代码的人都知道这些方法的用途.这样做会告诉读者您的类实例之间的值相等的标准.阅读您使用的代码的人equals会立即知道您正在检查值是否相等.
如果你使用其他名称,它只会让读者感到困惑,并花费额外的时间阅读你的JavaDocs以找出你的方法的用途.
| 归档时间: |
|
| 查看次数: |
3351 次 |
| 最近记录: |