所有对象通用的方法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,从超类继承的行为同样适用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容