Java杂谈之重写equals方法
什么是equals方法
Java中用equals方法来判断两个对象是不是相等,equals方法是Object类就拥有的方法,因此所有类都拥有该方法,使用方式很简单:a.equals(b) ,返回true或false。
Object中的equals方法的源码
public boolean equals(Object obj) {
return (this == obj);
}
为什么需要重写equals方法
从object处的继承来了equals仅仅判断了2个对象的内存地址是否一样,这样的代码,每办法满足大部分的情况,因此新建的类如果需要使用equals方法就需要重写equals方法。
重写equals方法需要遵守的规范
1、自反性:对于任何非空引用x,x.equals(x)应该返回true。
2、对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。
3、传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true。
4、一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。
5、非空性:对于任意非空引用x,x.equals(null)应该返回false。
除了以上5条规范需要遵守以外,重写equals以后一定要重写hashCode方法,如果不重写hashCode方法的话,在类似于HashMap这样通过hash定位元素的类里面,会出现相同的实例但是存在多个Key的情况。