Java-对象相等判断
引用相等性和对象相等性
引用相等性
两个引用指向堆上同一个对象,成为引用相等

对象相等性
堆上两个对象使用equals方法+hashCode方法 都为true时 认为两个对象是相等的
if (a.equals(b) && a.hashCode() == b.hashCode()) {
// 两个引用指向同一个对象或者两个对象是相等的
}
equals和hashCode
equals
java中所有的类都集成自Object类,Object对equals方法的实现如下
public boolean equals(Object obj) {
return (this == obj);
}
因此在未对Object的equals方法做覆盖的时候,equals方法和"=="是相同的效果
equals通常用来比较两个对象的内容是否相等
==用来比较两个对象的地址是否相等。
JDK中说明了实现equals()方法应该遵守的约定:
1)自反性:x.equals(x)必须返回true。
2)对称性:x.equals(y)与y.equals(x)的返回值必须相等。
3)传递性:x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)必须为true。
4)一致性:如果对象x和

本文深入探讨了Java中的引用相等性和对象相等性,讲解了equals和hashCode方法的区别与联系。遵循JDK中equals方法的约定,强调其自反性、对称性、传递性、一致性和非null性质。同时,分析了hashCode在哈希表中的作用,解释了hash码相同和不同时对象存储的情况。最后,提供了重写equals和hashCode方法的实践案例。

3053

被折叠的 条评论
为什么被折叠?



