1.Object的equals方法?
equals在非空对象的引用上实现了等值关系:
(1)自反性:x.equals(x),值为true。
(2)相称性:x.equals(y),值为true;y.equals(x),值为true。
(3)传递性:x.equals(y),值为true;y.equals(z),值为true;x.equals(z),值为true。
(4)一致性:x.equals(y),值为true;多次调用后,值还是true。
(5)x.equals(null),值为false。
注:重载此方法,一般应同时重载hashCode方法。这样做的目的是维护hashCode方法的公共约定;值相等的对象,hashCode也相同。
2.Object的hashCode方法?
返回对象的hash值。这个方法为Hashtable提供支持。
hashCode的公共约定:
(1)Java应用程序的执行过程中,多次调用同一对象的hashCode方法,返回的值应该相同。该对象的equals方法被修改后,此值不受影响。应用程序的两次执行过程中,不需要维护这个值的一致性。
(2)如果两个对象通过equals方法比较,为true。则分别调用两个对象的hashCode方法,应该返回相同的整数值。
(3)对下列情况不做要求。如果两个对象通过equals方法比较不相等,分别调用两个对象的hashCode方法,必须制造出不同的整数值。无论如何,程序员应该注意到,两个不同的对象拥有不同的hashCode值,可以改善Hashtable的性能。