Java:重写equals和hashCode
来源:互联网 发布:软件项目管理实践 编辑:程序博客网 时间:2024/04/30 01:44
1. 当一个类有自己特有的“逻辑相等”概念时,我们需要重写equals.按照以下原则来重写:
- 使用instanceof操作符检查“实参是否为正确的类型”。
- 对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域。
- 对于非float和double类型的原语类型域,使用==比较
- 对于对象应用域,递归调用equals方法。
- 对于float域,使用Float.floatToIntBits(afloat)转换为int,再使用==比较。
- 对于double域,使用Double.doubleToLongBits(adouble)转换为int,再使用==比较。
- 对于数组域,调用Arrays.equals方法。
2.当改写equals()的时候,总是要改写hashCode()。这是因为根据一个类的equals()方法(改写后),两个截然不同的实例有可能在逻辑上是相等的,但是,根据Object.hashCode方法,它们仅仅是两个对象。这违法了“相等的对象必须有相等的散列码”
3.设计hashCode()原则:
⑴.把某个非零常数值,例如17,保存在int变量result中。
⑵.对于对象中每一个关键域f(指equals方法中考虑的每一个域)
①.boolean型,计算(f?0:1)。
②.byte,char,short型,计算(int)。
③.long型,计算(int)(f^(f>>>32));
④.float型,计算Float.floatToIntBits(afloat);
⑤.double型,计算Double.doubleToLongBits(adouble)得到一个long,再执行上面一步;
⑥.对象引用,递归调动它的hashCode方法
⑶.将上面计算得到的散列码保存到int变量C,然后执行result=37*result+C;
⑷.返回result
0 0
- 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()
- 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()
- ListView.setOnItemClickListener无效问题的解决
- Kendo UI开发教程(1): 概述
- python中 __name__及__main()__的使用
- php第二章 文件操作
- (三)Object、String、正则表达式
- Java:重写equals和hashCode
- 【34】旋转数组的最小数字
- linux远程登录配置
- 跟阿根一起学Java Web开发一:开发环境搭建及JSPGen基础配置
- Kendo UI开发教程(2):准备Kendo UI开发环境
- Perl如何安装新模块/包
- 数据结构实验:哈希表(SDUT 1480)
- JD 1078:二叉树遍历
- C++11 新特性之 nullptr