开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天,点击查看活动详情
重写equals()的规范
需要注意的是,在Java规范中,它对equals()方法的使用必须要遵循如下几个规则:
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 对称性:对于任何非空引用值 x 和 y,当且仅当y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 传递性:对于任何非空引用值 x、y 和z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回false,前提是对象上 equals 比较中所用的信息没有被修改 对于任何非空引用值 x,x.equals(null) 都应返回false。
重写equals()可能的误区一般的equals()写法
下面给出一个完美的 equals 方法的建议:
1、显示参数命名为 otherObject,稍后会将它转换成另一个叫做 other 的变量。
2、判断比较的两个对象引用是否相等,如果引用相等那么表示是同一个对象,那么当然相等
3、如果 otherObject 为 null,直接返回false,表示不相等
4、比较 this 和 otherObject 是否是同一个类:如果 equals 的语义在每个子类中有所改变,就使用 getClass 检测;如果所有的子类都有统一的定义,那么使用 instanceof 检测
5、将 otherObject 转换成对应的类类型变量
6、最后对对象的属性进行比较。使用 == 比较基本类型,使用 equals 比较对象。如果都相等则返回true,否则返回false。注意如果是在子类中定义equals,则要包含 super.equals(other)
java中==和equal的区别
四点区别:
- equals 是方法 == 是操作符
2.对于基本数据类型的变量来说,这些基本数据类型没有equals方法,只能用 == 进行比较 所以比较的是基本数据类型的值
3.对于引用数据类型的变量来说,只有继承Object类的才有equals方法。例如String类。
4.equals方法用于该类型对象的比较 默认情况下,在没有重写equals方法是时候使用== 和equals比较是一样的效果,都是比较的他们在内存中的地址 。