Java对于重写equals的检查

来源:互联网 发布:怎么改淘宝会员名 编辑:程序博客网 时间:2024/06/18 12:08

  Java类的equals方法是从Object类中继承来的,用来判断对象是否逻辑上相等,而不是只判断对象的引用相等(==)。举个例子,判断字符串相等只要两个字符串的内容相等即可,两个字符串的equals就为true,而二者的==并不一定成立。

  Java对重写的equals方法有一定约束,要满足对称性,反射性,类推性,一致性等原则,但实际上对反射性(x.equals(x)必须返回是“true”)并没有检查,看下面的程序:

  这里的equals直接返回的是false,明显不满足反射性,而这段代码编译运行都没有出错;而且在Java官方的API中建议的写法也有一定的问题,在继承中父类和子类对象的比较中并没有满足对称性,由此可见,重写equals方法的约束条件只是建议,而不是强制性的约束,因此我们在重写equals的时候要知道自己在干什么,防止出现上面的情况,虽然逻辑上时错误的,但编译运行都没有问题。

  以前还做过一道很诡异的题:如果2个对象==,则他们一定equals一定是true吗?虽然逻辑上我们一定认为是正确的,但实际上却不一定哦。

O(∩_∩)O~

原创粉丝点击