为什么要重写hashcode和equals方法

https://www.bilibili.com/video/BV1u44y1K7GA/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=297c866c71fa77b161812ad631ea2c25

什么情况下要考虑重写

当对象类型作为hashmap的key时,如下的user对象。

为什么常用的String,没有重写,是因为默认已经做过处理了。

为什么要重写hashcode和equals方法_第1张图片

为什么要重写hashcode和equals方法_第2张图片

在没有放开时,当对象是User时,应该就是对object进行 hashCode和equals , hashcode最终是对象的地 址引用,所以值肯定也不一样

为什么要重写hashcode和equals方法_第3张图片

当只放开hashcoe重写时,结果也是null,为什么呢?

重写了hashcode了,它们的hashcode会相等,hashmap是用链路地址来解决冲突的, 怎么判断地址值是不是一样,就是用的object.equlas来判断的,这里的值还(对象的默认的hash值)是使用的对象object.equals,值还是不一样。

在下标1下(对象hash值对应的引用下标),可能用链路形式存储着多个对象user1,user 2, 当两个对象hash都指向1时,就开始用eqlues方法来判断两个对象是否相等。没重写肯定是不相等的。

为什么要重写hashcode和equals方法_第4张图片

为什么要重写hashcode和equals方法_第5张图片

你可能感兴趣的:(#,java,java)