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不等,两个对象一定不等

posted on 2020-05-13 06:14  菜鸟乙  阅读(154)  评论(0)    收藏  举报