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

浙公网安备 33010602011771号