`
- 浏览:
31130 次
- 性别:
- 来自:
苏州
-
关于.hashcode()和equals()的问题
今天看代码的时候忽然发现有些类会重写equals方法和hashcode方法以及相应的toString方法,对于我来说完全不明
白为什么要这么做,我查了下资料,终于找到了原因!
equals是Object类就有的方法是用来检测一个对象是否等于另外一个对象,在Object类中,这个方法将判断两个对象
是否具有相同的引用。对于需要检测两个对象状态的时候,那么就要重新去实现一下这个方法了。比如说2个雇员对象如果
ID相同,那么他们肯定是相同的。那么我仅仅只需要判断ID就好了,那么我就重写咯,o(∩_∩)o。
而且JAVA语言规范对equals方法还具有一下特性:
1.自反性:对于任何非空引用x,x.equals(x)应该返回true;
2.对称性:对于任何引用x,y,如果x.equals(y)返回true,那么y.equals(x)也应该返回同样的结果;
3.传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;
4.一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果。
5.对于任意非空引用x,x.equals(null)应该返回true.
然后有一系列的对比方式来解决继承和超类的比较
接下来就是关于hashcode了对于每一个对象来说都有它相对应唯一的hashcode,也叫做散列码,它也作为对象在内存当
中的存储地址。那么你override了equals方法,你也应该override掉hashcode方法,以便用户可以将对象插入到散列表中
(hashmap).
欢迎喜欢旅游的朋友来这里参观
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
HashCode相同equals不同的2位字符集合算法 另附ASCII码表
关于hashCode()和equals()的本质区别和联系.doc
java中hashcode和equals的详解.pdf
本文档详细介绍了set接口为什么会用到hashCode和equals方法以及这两个方法的一些探讨 set不同的实现类用到的这两个方法也不同
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。 hashCode()和equals()定义在Object类中,这...
计算机后端-Java-Java核心基础-第24章 集合01 23. 关于hashCode()和equals()的重写.avi
有许多人学了很长时间的Java,但一直不明白hashCode方法的作用,我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。
hashcode、equals、==总结1简单总结.txt,他们之间的区别
重写equals和hashcode方法,学习和进步
主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
hashcode()和equals() 博客地址:https://blog.csdn.net/qq_36963950/article/details/107543471
更清楚的了解hashcode()和equals()方法。
这里是一个文档,里边讲解了hashCode与equals方法使用,大家要是不明白,可以去看看
文章目录1、hashCode与equals两者之间的关系2、== 和equals的区别`3、为什么要重写equals()方法?4、重写equals()方法5、为什么要重写hashCode()方法?6、什么时候需要重写hashCode()方法?7、重写hashCode()方法: ...
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。下面这篇文章主要给大家介绍了关于java中hashCode、equals的使用方法,需要的朋友可以参考下。
但是为什么JavaDoc明确的告诉我们, hashCode()和equals()要一起重写呢?原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点...