阅读量:0
在Java中,equals()
方法是用于比较两个对象是否相等的方法。默认情况下,equals()
方法会调用对象的hashCode()
方法,因此,如果两个对象相等,它们的哈希码也一定相等。但是,反过来并不总是成立,即两个对象的哈希码相等,并不意味着这两个对象一定相等。
equals()
方法的定义如下:
public boolean equals(Object obj)
其中,obj
是要与之比较的对象。如果传入的对象与当前对象相等,则返回true
;否则返回false
。
在自定义类中,如果需要进行相等性比较,通常需要重写equals()
方法。在重写时,需要注意以下几点:
- 对称性:如果
x.equals(y)
返回true
,那么y.equals(x)
也应该返回true
。 - 自反性:对于任何非空引用值
x
,x.equals(x)
应该返回true
。 - 传递性:如果
x.equals(y)
返回true
,y.equals(z)
返回true
,那么x.equals(z)
也应该返回true
。 - 一致性:如果
x
和y
的值没有发生变化,那么多次调用x.equals(y)
应该始终返回相同的结果。 - 非空性:对于任何非空引用值
x
,x.equals(null)
应该返回false
。
此外,还需要注意与hashCode()
方法的关系。如果在自定义类中重写了equals()
方法,通常也需要重写hashCode()
方法,以保持equals()
和hashCode()
之间的一致性。这是因为Java中的哈希表(如HashMap
)依赖于对象的哈希码来进行存储和检索操作。如果两个相等的对象返回不同的哈希码,那么这些对象在哈希表中就无法正确地存储和检索。