Java Object equals方法

来源:互联网 发布:苏州博物馆 知乎 编辑:程序博客网 时间:2024/05/29 14:14

博主是大三的在校大学生,学习计算机的路上,有些自己的感悟,写下来互相讨论下,欢迎吐槽。

Object类是Java中所有的类的始祖,equals()是Object类中检测一个对象是否等于另外一个对象。这个方法将判断两个对象是否具有相同引用,如果两个对象具有相同的引用,那么这两个对象一定相等。但是大多数类来说,这种判断并没有什么意义,如果这两个对象的状态相等,就认为这两个对象是相等的。所以有时候并不是具有相同引用才是相等。

因此有必要给出一个完美的重写equals方法的建议:

1.显示参数命名otherobject,稍后需要把他转换成另一个叫做other的变量。

2.检测this与otherobject是否引用同一个对象

if(this==otherobject) return true;

3.检测otherobject是否为null,如果是null返回false。

4.比较this与otherobject是否属于同一个类。如果equals的语义在每个子类的中有所更改,就用getClass检测

if(this.getClass()!=otherobject.getClass())      return false;

如果所有子类都拥有统一的语义,就使用instanceof检测

if(!(otherobject instanceof Classname))    return false;

5.将otherobject转换为相应的类类型变量:

ClassName other=(ClassName) otherobject
6.对所有的需要进行比较的域开始比较。使用==比较基本类型域,使用equals比较对象域。如果所有的都匹配,就返回true;否则返回false

return filed1==other.filed1        && Objects.equals(field2,other.filed2)       && .....;
完整的代码:
public boolean equals(Object otherobject){if(this==otherobject)return true;if(otherobject==null)return false;if(getClass()!=otherobject.getClass())return false;Person other=(Person)otherobject;return name.equals(other.name)&& money==other.money && ...;}


1 0
原创粉丝点击