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,从超类继承的行为同样适用
网友评论