.equals()
方法和hashcode()
方法的作用
.equals()方法用于判断该对象是否为同一对象,而默认的判断依据为“在内存中是否为同一位置”
hashcode的存在主要是用于查找的便携性,为不同的对象返回不同的整数。例如有0,1,2,3这四个块,有了hashcode就不用一个个按顺序找过去或是二分查找了,可以方便地标记一个对象的存储区块。.equals()
方法和hashcode()
方法的联系
同一个存储区块中可能有多个对象,而equals()方法就是用来区别其中的不同对象的。
也就是说,被判定为equals的两个对象的hashcode必须相同,但是hashcode相同的对象可以不满足equals的条件- 为什么要重写
.equals()
方法
有些时候需要判断是否为同一对象时,判断依据并不应该是”在内存中是否为同一位置”,比如说加入购物车时,同一个商品应该被合并,数量增加,而不是出现两次该商品,但只要是分别new出来的,它们所在的位置就不可能相同,自然也不满足equals的条件。要使它们被判定为同一商品(比如说利用独一无二的id)则需要重写。 - 为什么重写
.equals()
方法也要重写hashcode()
方法
参考第二点,被判定为equals的两个对象的hashcode必须相同,不同的话非常降低查找效率。 .equals()
方法和hashcode()
方法的重写
source - generate hashCode and equals()… - 选择属性
选择的属性即为用于判定是否为同一对象的依据,类似于数据库中的主键(可有多列)
java-.equals()方法和hashcode()方法(重写)
最新推荐文章于 2023-10-17 10:19:15 发布