如果想判断一个类的两个对象是否相等 为啥要重写equals和hashcode方法啊

时间:2020-12-14 16:12:03
如果想判断一个类的两个对象是否相等  为啥要重写equals和hashcode方法啊

6 个解决方案

#1


需求上考虑:
比如一个人在不同的时期在系统中生成了两个实例,要想判断这两个实例是不是一个人,比较身份证号就可以了。假定这两个实例,一个是16岁时建立的档案,一个是24岁入职建立的档案,如果不重写equals方法,这两个实例肯定不是一个人了。
技术上我就说不明白了,和内存存储有关,一起期待大神了!!

#2


因为HashSet和HashMap等集合的工作机制涉及这两个方法。业务上对象是否相等只由equals方法决定,但hash表的存储和查找过程会用到hashcode方法,因此它俩共同影响了对象在集合中的唯一判断,因此两个方法必须正确实现。

#3


默认的equals方法比较的是引用是否相等,即是否指向同一个对象,所以如果要比较两个对象是否相等,需要确定比较的规则,这就是通过重写equals由你来定。一旦重写了equals方法就必须重写hashcode方法,目的是确保当两个对象equals的时候,hashcode一定相等

#4


两对象的hashcode相等不一定两个对象equals;但是如果两个对象equals,那么两个对象的hashcode一定相等;

主要是如果你直接用等号判断两对象是否相等的话?判断的是两对象的内存内存地址

#5


该回复于2015-09-02 13:11:13被管理员删除

#6


java基础,equals方法是个比较规则,它的权利就是:我认为你俩相等,你俩就相等。  

每个对象都是很多属性,很多时候我们认为只要他们的ID或者编号相等,就代表他俩相等,equals就是定义这个比较规则的。

至于hashcode,就简单理解绑定到equals一起的,必须重写就好了,equals相等时,hashcode必须相同才行

#1


需求上考虑:
比如一个人在不同的时期在系统中生成了两个实例,要想判断这两个实例是不是一个人,比较身份证号就可以了。假定这两个实例,一个是16岁时建立的档案,一个是24岁入职建立的档案,如果不重写equals方法,这两个实例肯定不是一个人了。
技术上我就说不明白了,和内存存储有关,一起期待大神了!!

#2


因为HashSet和HashMap等集合的工作机制涉及这两个方法。业务上对象是否相等只由equals方法决定,但hash表的存储和查找过程会用到hashcode方法,因此它俩共同影响了对象在集合中的唯一判断,因此两个方法必须正确实现。

#3


默认的equals方法比较的是引用是否相等,即是否指向同一个对象,所以如果要比较两个对象是否相等,需要确定比较的规则,这就是通过重写equals由你来定。一旦重写了equals方法就必须重写hashcode方法,目的是确保当两个对象equals的时候,hashcode一定相等

#4


两对象的hashcode相等不一定两个对象equals;但是如果两个对象equals,那么两个对象的hashcode一定相等;

主要是如果你直接用等号判断两对象是否相等的话?判断的是两对象的内存内存地址

#5


该回复于2015-09-02 13:11:13被管理员删除

#6


java基础,equals方法是个比较规则,它的权利就是:我认为你俩相等,你俩就相等。  

每个对象都是很多属性,很多时候我们认为只要他们的ID或者编号相等,就代表他俩相等,equals就是定义这个比较规则的。

至于hashcode,就简单理解绑定到equals一起的,必须重写就好了,equals相等时,hashcode必须相同才行