覆写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中进行修改,使之更合理。

 






posted @ 2016-07-31 21:41  奋斗之路-张思思  阅读(175)  评论(0)    收藏  举报