1 原文:
https://www.cnblogs.com/1446358788-qq/p/12880063.html#_label1
2 demo
//重写equals要实现hachCode() @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + age; return result; } //第三步 @Override public boolean equals(Object obj) { if (this == obj) //判断对象地址是否相等,如果是就不用判断,提高效率 return true; if (obj == null) //对象为空,则不往下走了 return false; if (getClass() != obj.getClass()) //判断两个对象是否一样: return false; TagReqDTO tag = (TagReqDTO) obj; //向下转型 /** 判断成员变量是否一样 */ if (age != tag.age) return false; //判断年龄,int类型,直接比较 //String类型,equals()比较 if (name == null) { if (tag.name != null) return false; } else if (!name.equals(tag.name)) return false; return true; }
3 为什么要重写
比较对象是否相同,我们理解上两个所有属性相同的不同new出来的对象应该是一致的,但是,计算机认为其是不一致的,为了解决这种情况,可以重写equals方法,重写equals必须重写hashcode,原因见下。
4 hashcode和equals关系
两个对象相等,hashcode一定相等
两个对象不等,hashcode不一定不等
hashcode相等,两个对象不一定相等
hashcode不等,两个对象一定不等
诸葛
浙公网安备 33010602011771号