我自己是这样理解的
对象都有自己的地址,但是地址是唯一的而且不可以更改
所有的对象因为都继承了Object类,所以都有自己的hashCode,而且这个hashCode是可以更改的
假设你需要一个Person的集合对象,但是对象里面包括(id,名称,性别,年龄,国籍,学历,等十项数据)
这时候你在往一个hashSet集合添加的时候,你只需要先比对HashCode值就可以了
当HashCode不同时,数据可以添加,当HashCode相同时,再使用equals的方法比较是否相同,这时候可能涉及的比较就相对复杂了
关于重写HashCode和equals方法问题,首先Object类定义的这两个方法的比较相对简单
所以我们重写HashCode是为了更快的比较要添加对象的不同,(应该是对效率的考虑,这句是我个人观点)
而且对于equals方法,显然我们的数据类型(一般为数字,字符)要比较的是大小,或者字母的排序
一般来说和地址值毫无关系,所以需要重写本对象的equals方法
以上为个人理解{:soso_e113:} |