java equal hashcode 重写

场景:java重写类的equalhashcode

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