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.equal