当前位置: 首页 > news >正文

一种常见的Java编程错误:没有同时定义equals()和hashCode()方法

前段时间出差了十几天,所以博客更新得有点慢了。

前几天看这篇论文:D. Hovemeyer and W. Pugh, "Finding bugs is easy," SIGPLAN Not., vol. 39, pp. 92-106, 2004. 介绍了Findbugs这种工具最初实现时能够检测的18种缺陷。一种有一种印象挺深的,这里总结一下:

Core Java Volume 1这本书在其197页也介绍到了这种规范,即如果在一个类中重新定义(重载)了equals()方法,那也必须同时定义(重载)hashCode()方法。由于在Object类中,hashCode()方法默认返回一个由虚拟机分配的任意值,如果仅仅定义了equals()方法,将导致两个相等的对象在一个哈希数据结构(如HashMapHashTable)中处于不同的位置。从而违反了哈希数据结构的语义。

所以,在对equals()hashCode()方法进行重载时,两者需要兼容。如果x.equals(y)返回true,那么x.hashCode()必须和y.hashCode()方法返回值相等。以Core Java这本书中为例,如果Employee.equals比较的是employee的ID,那么hashCode()方法也应该对employee的ID进行哈希(两个相等的String的哈希值是相等的)。

HashMap的使用方法:http://blog.csdn.net/devillyd/article/details/3135479

 

转载于:https://www.cnblogs.com/quyu/archive/2012/05/06/2486608.html

相关文章:

  • 什么是 DLL?
  • Extjs 常见问题:如何提交combobox的值
  • 在flex下,切换模块时出现RemoteClass注册失败
  • jQuery.get(url,[data],[callback])
  • 免费收录网站搜索引擎登录口大全
  • js事件列表
  • Linux下编译安装php扩展pdo_oci
  • 管理sharepoint2010开发者面板的4方法
  • 程序阅读理解题目(高中语文版,附答案)
  • Android 编码规范:(四)通过私有构造器强化不可实例化的能力
  • linux命令split
  • jQuery--联动日历(一)
  • 【背景建模】基于纹理特征的背景建模
  • C#之线程、委托,强强联手操作窗体控件...
  • F1论坛快速回复工具...
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 2019年如何成为全栈工程师?
  • Angular数据绑定机制
  • CentOS从零开始部署Nodejs项目
  • E-HPC支持多队列管理和自动伸缩
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • iOS编译提示和导航提示
  • Java 网络编程(2):UDP 的使用
  • MySQL用户中的%到底包不包括localhost?
  • NSTimer学习笔记
  • php的插入排序,通过双层for循环
  • React-redux的原理以及使用
  • Shell编程
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 安装python包到指定虚拟环境
  • 分类模型——Logistics Regression
  • 前端面试之CSS3新特性
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 区块链共识机制优缺点对比都是什么
  • 设计模式 开闭原则
  • 硬币翻转问题,区间操作
  • nb
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 国内开源镜像站点
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2020)Java后端开发----(面试题和笔试题)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (poj1.3.2)1791(构造法模拟)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (力扣)1314.矩阵区域和
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (转)nsfocus-绿盟科技笔试题目
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net FrameWork总结
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化