我们都知道,在定义对象时,我们不会知道类的域回事什么类型
或者是基本类型,又或者是引用类型
传统的比较方法是,在比较基本类型时:
使用”==”,但是在比较引用类型是我们不能通过这种方式去比较
当然这种比较也没有什么实际意义
所以在比较域时就产生了问题,当大量的引用域,与大量的基本类型域一起组成对象时
我想你在比较类型相同方面基本疯了
EqualsBuilder类是重写equals方法的工具类
常用方法如下
append(Object lhs,Object rhs)
//如果两者对象相等,返回true否者返回false
append(int lhs,int rhs);
如果两者对象相等,返回true否者返回false
append(double lhs,double rhs);
如果两者对象相等,返回true否者返回false
isEquals()
如果检查的域都相等,就返回true否则就返回false
那么我们在重写equals方法就简单了
在这里使用cat作为类对象
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Cat cat = (Cat) obj;
//在实际的开发过程中,我们不知道一个对象的域是应用类型还是基本类型
//采用EqualsBuilder可以解决这个问题
return new EqualsBuilder().append(name, cat.name).append(age, cat.age).append(weight, cat.weight).append(color, cat.color).isEquals();
}
当然我们在重写了equals方法后也要重写hashCode方法
@Override
public int hashCode(){
return 7 * name.hashCode() + 11 * new Integer(age).hashCode() + 13 * new Double(weight).hashCode() + 17 * color.hashCode();
}
计算哈希码的方式很多,一般来说就是选择质数相乘后各域相加
这个不了解的可以看看数据结构,大致的意识是质数的线性散列更好,具体的不记得了,大家可以查书