java equal hashcode 重写
场景:java重写类的equal 跟hashcode
java重写类的equal 和hashcode
java equals 与 hashcode的理解
http://blog.****.net/lishehe/article/details/18839495
java 类的equals方法重写例子
hashcode重写
注意:当使用ORM的时候特别要注意的
如果你使用ORM处理一些对象的话,你要确保在hashCode()和equals()对象中使用getter和setter而不是直接引用成员变量。因为在ORM中有的时候成员变量会被延时加载,这些变量只有当getter方法被调用的时候才真正可用。
例如在我们的例子中,如果我们使用e1.id == e2.id则可能会出现这个问题,但是我们使用e1.getId() == e2.getId()就不会出现这个问题。
两个对象先比较的事hashcode,再比较equals。如果equals相等,说明hashcode相等,如果两个对象hashcode相等,不一定说明两者相等,只能说明它们在同一个hash链表上,还需要比较它们的equals方法。
原文链接http://www.oschina.net/question/82993_75533
java重写类的equal 和hashcode
java equals 与 hashcode的理解
http://blog.****.net/lishehe/article/details/18839495
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方法。
原文链接http://www.oschina.net/question/82993_75533