Java软件低级错误(十 四):定义equals方法的同时也要定义hashCode方法
来源:互联网 发布:网络直播的研究意义 编辑:程序博客网 时间:2024/06/06 01:18
解读:
equals方法用于实现对象之间逻辑上是否相等的判断,而不是判断两个引用是否指向同一个对象,hashCode用于返回对象的哈希码(也有翻译成散列码的),逻辑上相等(equals比较相等)的两个不同对象它们返回的hashCode值肯定不相等。 Java规范中规定:如果两个对象根据equals(Object)方法是相等的,那么调用这两个对象中任一个对象的hashCode方法必须产生同样的整数结果,所以定义equals的同时一定要定义hashCode,并且要保证equals比较相等的对象,hashCode返回值也必须相同。
¨案例:
Map<PhoneNumber, String> m = new HashMap<PhoneNumber, String>();
m.put(new PhoneNumber(707, 867, 5309), "Jenny");
System.out.println(m.get(new PhoneNumber(707, 867, 5309)));
上面的代码,PhoneNumber定义了equals方法,没有定义hashCode,输出的结果原本希望是Jenny,但结果却是null,上面的类定义违反了上面所说的Java规范,运行时实际上有两个PhoneNumber 对象,但逻辑上是同一个对象。PhoneNumber使用了默认的hashCode实现,使的逻辑上相同的对象(equals比较相等),它们的hashCode却不同,Map查找对象的时候会首先比较hashCode值,然后再使用equals比较,造成Map无法找到期望的对象。
- Java软件低级错误(十 四):定义equals方法的同时也要定义hashCode方法
- Java软件低级错误: 定义equals方法的同时也要定义hashCode方法
- Java软件低级错误(十 ):正确定义hashcode
- 一种常见的Java编程错误:没有同时定义equals()和hashCode()方法
- Java中复写equals()方法的同时也要复写hashCode()方法
- 为什么重写equals方法的同时也要重写hashcode方法?
- 重写equals方法的同时为什么要重写hashcode方法
- 重写equals()方法的同时要重写hashcode()方法
- 覆盖 equals 方法时应同时覆盖 hashCode 。(java)
- JAVA中重写equals()方法的同时要重写hashcode()方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- JAVA中自定义对象比较时重写equals()方法的同时要重写hashcode()方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- Java基础之重写equals方法的同时为什么要重写hashCode方法
- head first 装饰者模式 -- 借助继承
- 使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
- 诺基亚技术支持提供的 qml json 交互
- Java软件低级错误(十 五):大小写转换的正确处理
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- Java软件低级错误(十 四):定义equals方法的同时也要定义hashCode方法
- 晒晒我的编辑器
- C类地址子网、主机、广播地址等子网掩码的相关的计算
- 如何当好IT讲师
- 我的Eclipse开发的格式化配置[gaogao自用]
- 我的第一个Spring程序
- MyEclipse 8.5下载地址及对应的eclipse版本
- 我的Eclipse代码模板配置[gaogao自用]
- 代理模式的学习