博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要重写 hashcode 和 equals 方法?
阅读量:3521 次
发布时间:2019-05-20

本文共 1181 字,大约阅读时间需要 3 分钟。

在项目中经常看到实体类中的set/get方法下都有这样一段代码:

public boolean equals(Object o){}public int hashCode(){}

这个方法的作用是什么呢?

如果没有这些重写equals 和hashcode方法会怎么呢?

这个要从HashMap说起。在定义HashMap时如果key值为自定义对象,必须重写equals和hashCode方法。

直接看代码:

class cimTest_hashcode_equals {	private Integer id;	public Integer getId()	{return id; }	public cimTest_hashcode_equals(Integer id)	{this.id = id;  }//	故意先注释掉equals和hashCode方法	  public boolean equals(Object o) {	      if (o == null || !(o instanceof cimTest_hashcode_equals))	      { return false; }	      else	      { return this.getId().equals(((cimTest_hashcode_equals) o).getId());}	  }//	  public int hashCode()	  { return id.hashCode(); }}
public class WithoutHashCode {	public static void main(String[] args) {		cimTest_hashcode_equals k1 = new cimTest_hashcode_equals(1);		cimTest_hashcode_equals k2 = new cimTest_hashcode_equals(1);		HashMap
hm = new HashMap
(); hm.put(k1, "Key with id is 1"); System.out.println(hm.get(k2));}}

先说一下执行结果: 1、注释掉equals方法,System.out.println(hm.get(k1)); -> Key with id is 1

                                  2、注释掉equals方法,System.out.println(hm.get(k2)); -> null

 

1 case code 结果 结论
2 注释掉equals和HashCode方法 System.out.println(hm.get(k2)) null
3        
4        
5        

 

转载地址:http://skeqj.baihongyu.com/

你可能感兴趣的文章
泛型详解
查看>>
泛型实现斗地主
查看>>
List集合
查看>>
ArrayList集合,LinkedList集合,Vector集合
查看>>
HashSet集合
查看>>
并发与并行,线程与进程
查看>>
方法引用,通过对象名引用成员变量
查看>>
常用工具类 Math:数学计算 Random:生成伪随机数 SecureRandom:生成安全的随机数 2020-2-13
查看>>
Java的异常Exception 2020-2-13
查看>>
Java标准库定义的常用异常,自定义异常 2020-2-15
查看>>
Java问题百度/Google记录 2020-2-16
查看>>
【PADS9.5】9,对比ECO核心板,Router移动元件后布线消失,Router找不到自动布线策略文件丢失或损坏
查看>>
【STM32+w5500汇总】23,HTTP_Client 连接到ONENET上传了一段数据之后会断开,数据上传格式的设置
查看>>
【STM32+W5500+MQTT】24,所有功能都可以通过API函数的调用来实现;HTTP接入ONENET,API开发手册和打包函数,串口软件HTTP连接服务器上传数据,2018年12月28日
查看>>
【STM32+W5500+HTTPClient】25,路由器DHCP租赁IP时间为2h,NetBios可以很好的解决IP变化的问题,DNS,2018年12月25日
查看>>
【STM32+MQTT+ONENET】26,MQTT协议接入OneNET
查看>>
【STM32+W5500+MQTT+ONENET】27,MQTT协议接入OneNET实际编程操作 2018年12月27日
查看>>
【STM32Cube+FreeRTOS 】28,KEIL5的F12不起作用;***JLink Error: Can not read register x while CPU is running
查看>>
【STM32CubeMX+FreeRTOS 】29,prtinf卡死;4任务只运行了3个;W5500联网失败(堆栈不能太大或者太小)
查看>>
【STM32+FreeRTOS +W5500移植要点】30,RTOS中断;从TIM2,主TIM3;RTOS主要用在LCD中;RT-Thread;标志重定义问题 2019年01月22日
查看>>