1. 程式人生 > >覆寫equals方法

覆寫equals方法

    我們在寫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中進行修改,使之更合理。