java重写类的equal 和hashcode

java equals 与 hashcode的理解
[url]http://blog.csdn.net/lishehe/article/details/18839495[/url]

java 类的equals方法重写例子

public boolean equals(Object o) {
if(o == null) {
return false;
}
if (o == this){
return true;
}
if (getClass() != o.getClass()){
return false;
}

Employee e = (Employee) o;
return (this.getId() == e.getId());

//如果有引入common包则可以用 Apache Commons Lang包重写hashCode() 和equals()方法
//return new EqualsBuilder().append(getId(), e.getId()).sEquals();
}


hashcode重写

final int PRIME = 31;
int result = 1;
result = PRIME * result + getId();
return result;
//Apache Commons final int PRIME = 31;
// return new HashCodeBuilder(getId()%2==0?getId()+1:getId(),PRIME).toHashCode();


注意:当使用ORM的时候特别要注意的
如果你使用ORM处理一些对象的话,你要确保在hashCode()和equals()对象中使用getter和setter而不是直接引用成员变量。因为在ORM中有的时候成员变量会被延时加载,这些变量只有当getter方法被调用的时候才真正可用。
例如在我们的例子中,如果我们使用e1.id == e2.id则可能会出现这个问题,但是我们使用e1.getId() == e2.getId()就不会出现这个问题。


两个对象先比较的事hashcode,再比较equals。如果equals相等,说明hashcode相等,如果两个对象hashcode相等,不一定说明两者相等,只能说明它们在同一个hash链表上,还需要比较它们的equals方法。
原文链接[url]http://www.oschina.net/question/82993_75533[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值