JAVA中关于equals的重写

学习JAVA不久,看了有关equals的内容,记录下来希望以后有用的时候能查找到,也希望能对别人有些许的帮助。

  

大家都知道JAVA有一个所有类的超类--Object类,它当中有许多的方法,其中就有equals的方法,在Object类中,这个方法用于判断两个对象是否具有相同的引用。但在自己写的类中,仅仅有这个判断是不足以满足我们的要求的。所以是需要重写这个类的,自己写的类也都应该都重写一下这个方法。

JAVA语言规范要求equals方法具有以下性质:

1)自反性:对于任何引用x,x.equals(x)返回true;

2)对称性:对于任何引用x,y,x.equalsI(y)返回true,y.equals(x)也应该返回true。

3)传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y,equals(z)返回true,那么x.equals(z)也应该返回true。

4)一致性:如果x,y引用的对象没发生变化,那么反复调用equals方法,结果不会发生改变。

5)对于任意引用非空的x,x.equals(null)返回false。



接下来提供一个完美的判断方法符合上面的性质。

判断的步骤:

@Override
public boolean equals(Object otherObject)

1.检测this与otherObject是否引用同一个对象

if(this==otherObject)return true;

这比一个一个比较两个类中的字段要省时很多,如果不是引用的同一个再进行下面的判断。

2.检测otherObject是否为null,如果为null则返回false,这是JAVA规范中要求的。

if(otherObject==null) return false;

3.检测this和otherObject是否属于同一个类,如果不是就没有比下去的意义了。

if(getClass()!=otherObject.getClass())return false;

4.将otherObject转换成相应类类型的变量。

ClassName other=(ClassName)otherObject;

5.对所有的字段进行比较,使用==比较基本类型,使用equals比较对象类型,如果都相等就返回true,否则返回false。

return field1==other.field1&&Objects.equals(field2,other.field2)&&......&&......;


下面是一个小样例,定义了一个Employee类:

public class Employee {
private String name;
private double salary;
private LocalDate hireday;

这是类中的所有字段。

下面是重写的equals方法

@Override
public boolean equals(Object otherObject)
{
//判断是否引用的同一个对象
if(this==otherObject)return true;
//判断用之比较的是否为null,是的话必须返回false
if(otherObject==null)return false;
//判断是否属于同一个类,不是的话就不相等,返回false
if(getClass()!=otherObject.getClass())return false;
Employee other=(Employee)otherObject;
//判断类里面的具体字段是否相等
return Objects.equals(name, other.name)&&salary==other.salary&&Objects.equals(hireday, other.hireday);
}

下面是从Employee类派生出来一个Manager类:

public class Manager extends Employee {
private double bonus;

重写它的equals方法:

@Override
public boolean equals(Object otherObject)
{
if(!super.equals(otherObject))return false;
Manager other=(Manager)otherObject;
return bonus==other.bonus;
}

可以看到不用从头判断,只要看利用super关键字看它的父类是否满足,接下来再单独判断一下新增字段就行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章