java 中 equals() 相等的两个对象,hashcode() 一定相等
2016-12-23 15:29
387 查看
在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。
为何会有这样的要求?
在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?
首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。
如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果
为何会有这样的要求?
在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?
首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。
如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果
public
V put(K key, V value) {
相关文章推荐
- eclipse使用--解决maven项目报错:找不到META-INF\MANIFEST.MF文件的问题
- log4j2.xml<Console name="Console" target="SYSTEM_OUT">
- 深入理解 Java G1 垃圾收集器--转
- Eclipse的Svn插件报错
- JVM 内部原理(七)— Java 字节码基础之二
- SpringMVC + ueditor + 七牛 实现富文本文件上传功能
- JVM 内部原理(六)— Java 字节码基础之一
- Java内存区域与内存溢出异常(二)
- JAVA 八皇后
- Java计算平方根算法
- Java --- 线程同步和异步的区别
- 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
- JAVA数组学习之一:对一维数组进行逆序排列
- java.lang.IllegalArgumentException
- java substring
- 1000行代码读懂Spring(一)- 实现一个基本的IoC容器
- springMVC接受list报错:Could not instantiate bean class [java.util.List]: Specified class is an interf
- Quartz中Cron表达式解释
- 标准的Java编码规范手册
- java开发系统内核:进程切换