重写equals方法

时间:2025-04-02 09:04:33
package ;


public class User {
private int id;
private String uname;
private int age;
private String sex;
private String city;
public int getId() {
return id;
}
public void setId(int id) {
= id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
= uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
= age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
= sex;
}
public String getCity() {
return city;
}
public void setCity(String city) {
= city;
}
//重写Object类下的toString()方法
public String toString(){
return "User [,uname="+uname+",age="+age+",sex="+sex+",city="+city+"]";
}


//第一步分析  
/*@Override 
public boolean equals(Object obj) { 
     *//** 
      * 这里要改进,根据这里的比较成员变量来决定返回true还是false 
      * 这里其实要比较的就是name,age和sex,city
      * 但是,name是String类型的,而String是引用类型的,所以,在这里不能直接用==比较, 
      * 应该用equals()比较 
      * this  -- s1 
      * obj -- s2 
      *//* 
     if(obj == null){ 
         return false; 
     } 
     //要使用的是用户类的特有成员,所以要向下转型 
     User s = (User)obj; // s -- obj -- s2 
     if( == && () && () && ()){ 
              return true; 
         }else{ 
              return false; 
         } 
}*/  
  
//第二步优化  
/*   @Override 
public boolean equals(Object obj) { 
     //为了提高效率 
     if(this == obj){ 
         return true; 
     } 
      
     //为了提供程序的健壮性 
     //我先判断一下,obj是不是用户的一个对象,如果是,再做向下转型,如果不是,直接返回false 
     //这个时候,我们要判断的是对象是否是某个类的对象? 
     if (!(obj instanceof User)) { 
         return false; 
     } 
     //如果是就继续 
     User user = (User)obj; 
     ("同一个对象,还需要向下转型比较吗?"); 
     return () && == && ()(); 
}*/  
  


//重写equals要实现hachCode()  
@Override  
public int hashCode() {  
     final int prime = 31;  
     int result = 1;  
     result = prime * result + age;  
     result = prime * result + ((uname == null) ? 0 : ());  
     result = prime * result + ((sex == null) ? 0 : ());  
     result = prime * result + ((city == null) ? 0 : ());  
     return result;  
}  
//第三步  
@Override  
public boolean equals(Object obj) {  
     if (this == obj)   //判断对象地址是否相等,如果是就不用判断,提高效率  
         return true;  
     if (obj == null)   //对象为空,则不往下走了  
         return false;  
     if (getClass() != ())  //判断两个对象是否一样:class --class  
         return false;  
    User user = (User) obj;  //向下转型  
     /** 判断成员变量是否一样 */  
     if (age != )     
         return false;  //判断年龄,int类型,直接比较
     //String类型,equals()比较
     if (uname == null) {  
         if ( != null)  
              return false;  
     } else if (!())  
         return false;  
     if (sex == null) {  
         if ( != null)  
              return false;  
     } else if (!())  
         return false;  
     if (city == null) {  
         if ( != null)  
              return false;  
     } else if (!())  
         return false; 
     return true;  
}


}