Object类中的equals方法,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
在重写equals方法时,要注意满足离散数学上的特性
(1)自反性:对任意引用值x,x.equals(x)的返回值一定为true.
(2)对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;
(3)传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true
(4)一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变
(5)非空性:任何非空的引用值x,x.equals(null)的返回值一定为false
注意: 当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明
(1)相等对象必须具有相等的哈希码,
(2)两个对象的哈希码不相等,那么equals一定不相等。
两个对象的哈希码相等,那么equals结果可能相等也可能不相等