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關鍵字看它的父類是否滿足,接下來再單獨判斷一下新增字段就行了。

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