equalsとhashCode

2258 ワード


  public class Person   
{   
    private int id;   
    private String name;   
    private String password;
	private double salary;
    private int hashCode;   
    public Person(int id,String name,String password,double salary) {   
      this.id = id;   
      this.name = name;   
      this.password = password;   
	  this.salary = salary;
    }   
    public boolean equals(Object obj) {   
       if (this == obj)   
       {   
           return true;   
       }   
       if (!(obj instanceof Person))   
       {   
           return false;   
       }   
       Person other = (Person)obj;   
       if (this.id != other.id)   
       {   
           return false;   
       }   
       if (!nullSafeEquals(this.name,other.name))   
       {   
           return false;   
       }   
       if (!nullSafeEquals(this.password,other.password))   
       {   
           return false;   
       }   
	   if (Double.doubleToLongBits(this.salary) != Double.doubleToLongBits(other.salary))
	   {
           return false;
	   }
       return true;   
    }   
    private boolean nullSafeEquals(Object obj1,Object obj2) {   
        return obj1 == null ? obj2 == null : obj1.equals(obj2);   
    }   

    public int hashCode() {   
       if (hashCode == 0)   
       {   
           int result = 17;   
           result = result * 37 + this.id;   
           result = result * 37 + (this.name == null ? 0 : this.name.hashCode());   
           result = result * 37 + (this.password == null ? 0 : this.password.hashCode());   
		   long temp = Double.doubleToLongBits(this.salary);
		   int salaryInt = (int)(temp ^ (temp >>> 32));
		   result = result * 37 + salaryInt;
           hashCode = result;   
       }   
       return hashCode;   
    }   
    public String toString() {   
       return super.toString() + ": [" + this.name + "]";    
    }   
}