覆寫equals方法
阿新 • • 發佈:2019-01-31
我們在寫java類時,經常會覆寫equals()方法,目的是根據業務判斷兩個物件是否相等。我們寫一個Person類,會根據姓名來判斷兩個例項物件是否相同,程式碼如下:
class Person{ private String name; public Person(String _name){ name = _name; } public void setName(String name){ this.name = name; } public String getName(){ return name; } public boolean equals(Object obj){ if(obj instanceof Person){ Person p = (Person)obj; return name.equalsIgnoreCase(p.getName().trim()); } return false; } }
覆寫的equals()做了很多校驗,考慮到從web上傳遞過來的物件有可能輸入了空格,所以用trim()方法進行了清除,接下來是main方法來檢驗是否正確。
public class Client{ public static void main(String[] args){ Person p1 = new Person("張三 "); Person p2 = new Person("張三"); List<Person> l = new ArrayList<Person>(); l.add(p1); l.add(p2); System.out.println("列表中是否包含張三:" + l.contains(p1)); System.out.println("列表中是否包含張三:" + l.contains(p2)); } }
結果如下:
經過改善將trim()擷取方法去掉,這樣就完全正確。但接下來又有一個新的問題,當傳入的值中有null時,我們應該怎樣來判斷呢?將Person中的類加上null的判斷即可,程式碼如下:
public boolean equals(Object obj){ if(obj instanceof Person){ Person p = (Person)obj; if(p.getName()==null ||name == null){ return false; }else{ return name.equalsIgnoreCase(p.getName()); } } return false; }
這樣就對java中常用的判斷相等的方法進行了重寫,重寫之後即使是同時建立了兩個物件,只要物件名相等,就可以認為這是相等的。當然我們也可以根據我們在專案中的不同需求,來進行覆寫我們的equals方法,比如當需要判斷員工號和姓名都對應時才是同一個員工,這樣就可以在equals中進行修改,使之更合理。