所有对象通用的方法equals

Object虽然是一个具体类,但是设计它的是为了扩展。所有非final方法:(equals、toString、hachCode、clone、finalize)都有明确的约定(contract)


equals:方法实现等价关系:

·自反性: 任何非null的引用值x. x.equals(x)必须返回true

·对称性: 任何非null的引用值x,y. x.equals(y)等于true.那么y.equsls(x)必须等于true

·传递性: 任何非null的引用值x,y,z. x.equals(y)等于true, y.equals(z)等于true,那么x.equals(z)必须等于true

·一致性: 任何非null的引用值x,y. 两对象equals操作所用的属性信息未修改,多次调用equals方法会一致的返回true.或者一致的返回false

·任何非null的引用值x, x.equals(null)必须返回null


避免重写equals导致的错误,最容易避免的就是不重写,类的每个实例只与它自身相等。满足一下情况正是期望的结果:

·类的每一个实例本质是唯一的

·不关心类的“逻辑相等”

·超类已经重写了equals,从超类继承的行为同样适用

你可能感兴趣的:(所有对象通用的方法equals)