对象比较时候重写qual和hashcode
我们在java和python的比较对象的时候,都会要求重写equal和hashcode的方法,之前学习过,后面忘记了。所以写一个博客用来记录一下的。
equal()的所属以及内部原理
说起equals方法,我们都知道是超类Object中的一个基本方法,用于检查一个对象是否与另外一个对象相等。而在Object类中这个方法实际上是判断两个对象是否具有相同的引用,如果有,它们就一定相等。
实际上我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的内存地址,所以说Object的equals()方法是比较两个对象是否相等,若object1.equals(object2)为true,则表示quals1和equals实际上是引用同一个对象
equals()与‘==’的区别
常常我们都会说equals比较的是对象的内容,而==比较的是对象的地址。
总结
默认情况下也就是从超类Object继承而来的equals方法与“==”是完全等价的,比较的都是对象的内存地址,但我们可以重写equals方法,使其按照我们需求的方式进行比较。
为什么重写equals()的同时还得重写hashCode()
Map接口的类会使用到键对象的哈希码,当我们调用put方法或者get方法对Map容器进行操作时,都是根据键对象的哈希码来计算存储位置的,因此如果我们队哈希码的获取没有相关保证,就可能会得不到预期的结果。在java中,我们可以使用hashCode()来获取对象的哈希码,其值就是对象的存储地址。