public boolean equals(Object o) {
if (o == this) //1.使用==操作符检查“参数是否为这个对象的引用”
return true;
if (!(o instanceof List))//2.使用instanceof操作符检查“参数是否为正确的类型”
return false;
ListIterator<E> e1 = listIterator();
ListIterator e2 = ((List) o).listIterator();//3.把参数转换成正确的类型
while(e1.hasNext() && e2.hasNext()) {
E o1 = e1.next();
Object o2 = e2.next();
if (!(o1==null ? o2==null : o1.equals(o2)))//4.对于该类中的每个“关键(significant)”域,检查参数中的域是否与该对象中的对应域相匹配
return false;
}
return !(e1.hasNext() || e2.hasNext());
}
上面的实例代码是AbstactList的equals方法。
《Effective Java》提出的equals方法的通用约定
·自反性:对于任何非null的引用值x,x.equals(x)必须返回true。
·对称性:对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)返回true。
·传递性:对于任何非null的引用值x、y和z,当且仅当y.equals(x)返回true,并且y.equals(z)返回true时,x.equals(z)返回true
·一致性:对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致地返回true,或者一致地返回false
·对于任何非null的引用值x,x.equals(null)必须返回false
实现高质量equals方法的诀窍
1.使用==操作符检查“参数是否为这个对象的引用”
2.使用instanceof操作符检查“参数是否为正确的类型”
3.把参数转换成正确的类型
4.对于该类中的每个“关键(significant)”域,检查参数中的域是否与该对象中的对应域相匹配
5.编写完equals方法后,应该问自己三个问题:它是否是对称的、传递的、一致的
分享到:
相关推荐
重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例
本文讲述了什么时候重写equals方法和如何重写equals方法。
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
equals方法重写作业,Students类,有三个属性id ,name ,grade。还有一个测试类用于测试创建了三个对象前两各对象的数据完全一样,第三个对象的数据不同。使用equals方法比较。并输出结果。
本文档详细介绍了set接口为什么会用到hashCode和equals方法以及这两个方法的一些探讨 set不同的实现类用到的这两个方法也不同
重写toString和equals方法的意义以及方法
Java中equals方法隐藏的陷阱
知识点 比较运算符==和equals方法的比较 知识点 比较运算符==和equals方法的比较
2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....
js equals 比较两个对象是否相等
Java中的==与equals()实例方法Java中测试两个变量是否相等的方法有两个,一个是用==运算符,另一个就是object类提供的equals()方法。2
这里是一个文档,里边讲解了hashCode与equals方法使用,大家要是不明白,可以去看看
C# Equals 和 GetHashCode 方法重写,
==和equals方法究竟有什么区别? == 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。 ...
更清楚的了解hashcode()和equals()方法。
重写equals和hashcode方法,学习和进步
Java equals 方法与hashcode 方法的深入解析.rar
本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。
java_equals用法,用来熟悉重写equals方法的
为什么重写equals方法,还必须要重写hashcode方法