public boolean equals(Object obj) {
return (this == obj);
}
表示其他对象是否等于当前对象,equals()方法对于非空对象引用实现等价关系。
1. 反身性
对于任何非空引用x,x.equals(x)应该返回true;
2. 相称性
对于任何非空引用x和y,当且仅当y.equals(x)返回true时,x.equals(y)应该返回true;
3. 传递性
对于任何非空引用x、y和z,如果x.equals(y)返回true、y.equals(z)返回true,x.equals(z)应该返回true;
4. 一致性
对于任何非空引用x和y,假设equals()比较使用的对象信息没有改变,多次调用x.equals(y)应该一致返回true或false;
对于任何非空引用x,x.equals(null)应该返回false。
Object类定义的equals()方法实现了对象差别可能性最大的等价关系,对于任何非空引用x和y,当且仅当x和y引用同一对象时,方法返回true。
重写方法时,通常需要重写HashCode方法以保持HashCode方法的一般约定,即相等的两个对象必须具有相等的HashCode。
public native int hashCode();
返回对象对应的HashCode值,此方法利用了哈希表的优势。
一般约定
1. 在Java应用程序一次执行期间,任何时候在同一对象上调用一次以上,假设equals()比较使用的对象信息没有改变,该方法必须返回同一整数;这个整数在应用程序两次执行期间不必保持一致。
2. 如果equals(Object)方法判定两个对象相等,在两个对象上调用该方法必须返回同一整数。
3. 如果equals(Object)方法判定两个对象不相等,在两个对象上调用该方法不必返回不同整数;但是程序员应当注意,为不相等的对象产生不同整数可能提升哈希表的性能。
小结
equals(Object)相等的两个对象HashCode值一定相等,
equals(Object)不相等的两个对象HashCode值可能不相等;
HashCode值相等的两个对象equals(Object)可能相等,
HashCode值不相等的两个对象equals(Object)一定不相等。
Object类定义的HashCode通过将对象的内部地址转换成整数,实现为不相等的对象产生不同整数。