Java中如何编写一个完美的equals方法
在Java中,由于语言规范要求equals方法具有以下特性:
1)自反性:对于任何非空引用x,x.equals(x)应当返回true。
2)对称性:对于任何引用x和y,当且仅当x.equals(y)返回true,y.equals(x)也应当返回true。
3)传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应当返回true。
4)一致性:如果x和y没有发生变化,那么反复调用x.equals(y)应当返回同样的结果。
对称性的要求在大多数时候比较合适,但是特殊情况下,却显得不那么合适(特殊情况的解释由于需要大量篇幅,本文的重点在于如何写一个完美的equals方法,故不再解释特殊情况)。所以,需要一个方法来自己编写一个完美的equals方法。编写步骤主要如下:
1)显示参数命名为otherObject,稍后需要将他转化成一个名为other的变量。
2)检测this和otherObject是否引用同一个对象:if(otherObject == this) return true;
3)检测otherObject是否为null,如果为null,则返回fals。
4)比较this和otherObject是否属于同一个类,如果equals的语义在每个子类中都有改变,那么就使用getClass()检测;如果所有的子类都有相同的语义,就用instanceof检测。
5)将otherObject转化成相应类型的变量:ClassName other = (ClassName)otherObject;
6)开始对所有需要比对的域进行比对,使用==比较基本类型,使用equals比对对象,如果所有的域都匹配,那么返回true,否则,返回false。
Java中如何编写一个完美的equals方法相关推荐
- java if equals_Java中判断对象是否相等的equals()方法使用教程
Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认 ...
- java的equals方法_在Java中编写完美的equals方法
相对于C++,Java并没有重载操作符,所以对于非基本类型都需要使用equals方法比较相等性.Object提供了equals方法比较两个对象,但对于用户自定义类而言Object提供的版本仅仅比较两个 ...
- Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点
*8.31(几何:交点)编写一个方法,返回两条直线的交点.四个点存放在4*2的二维数组points中.编写一个程序,提示用户输入4个点,并显示交点 题目 题目描述 破题 代码 本题运行实例 题目 题目 ...
- Java黑皮书课后题第6章:*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序。使用下面的方法体编写一个计算税款的方法。使用这个方法编写程序,打印可征税人从50000到60000间隔
*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序.使用下面的方法体编写一个计算税款的方法.使用这个方法编写程序 题目 题目描述 破题 程序清单3-5(非本题):代码不全 补充代码:编 ...
- java怎么统计随机数出现次数,Excel统计出现次数、个数的VBA代码 java中怎么判断一个字符串中包含某个字符或字...
延伸:java中怎么判断一个字符串中包含某个字符或字符 描述:...一个字符串中包含某个字符的单词说出现的次数 c#什么方法可以判断字符串中包含某个字符的个数? JAVA判断字符串数组中是否包含某字符 ...
- Java中怎么样检查一个字符串是不是数字呢
问题:Java中怎么样检查一个字符串是不是数字呢 在解析之前,怎么样检查一个字符串是不是数字呢 回答一 这些通常是由一个简单的用户自定义函数去解决的(即,自带的 "isNumeric&quo ...
- 在Java中如何从一个多层嵌套循环中直接跳出?
一.问题描述 最近发现一个有趣的问题,在Java中如何从一个多层嵌套循环中退出呢? 例如下面,有两层循环,break只能退出第一个for循环,不能直接跳出第二个for循环外面. public stat ...
- java 需要返回类型_在Java中,当一个方法不需要返回数据时返回类型必须是
[问答题]在滑动轴承中什么是瓦背?其特点有哪些? [多选题]起重机采用变频调速改造后,有哪些效果? [判断题]当热继电器动作不准确时,可用弯折双金属片的方法来调整. [单选题]X62W型万能铣床进给电 ...
- 怎样设置一个函数C语言,C语言中怎样编写一个函数 如何在C语言中定义一个函数?...
如何在C语言中定义一个函数?小编很想在你面前流泪最后却还是选择装作打个哈欠 为什么小编怎么定义函数都不正确呢? 总是说小编 表达语法错误在main函数中 小编们可以在头文件与main函数之间定义,并编 ...
最新文章
- html单行注释符号
- JavaScript——this、constructor、prototype
- Oracle的连接与会话
- c#根据年份和月份获得本月最后一天
- 四. python的time和datetime 模块
- 奥委会主席巴赫与马云对谈:阿里巴巴能将奥运精神带进科技时代
- Javascript 笔记(1)----函数
- python编辑器_python编辑器,作为小白该如何抉择?
- 计算机网络在实践教学,高职计算机网络技术实践教学研究
- 是Dubbo不香了吗?阿里为啥又搞一套Spring Cloud Alibaba?
- selenium-标签元素定位法-0223
- 关于 Docker ,你必须了解的核心都在这里
- Linux基础—3.Linux基础命令总结【有图有真相】
- 第一次在CSND做记录,关于linux修改文件的最后访问时间。
- SQL Server 创建索引(index)
- linux的cd命名返回上级目录,返回根目录
- conda 环境复制
- 《商用密码应用与安全性评估》第四章 密码应用安全性评估实施要点-小结
- 车道线分割项目记录-模型构建
- (JAVA)错误:Type mismatch: cannot convert from double to float ,这是什么意思?如何解决?
热门文章
- 【BZOJ1084】【codevs2454】最大子矩阵,DP
- 【BZOJ2438】杀人游戏,tarjan缩点+简单的概率计算
- 18.外部相机校准——刚体变换,变换和旋转,外参数矩阵 测验_3
- bzoj2245 [SDOI2011]工作安排 费用流
- 2017.10.22 诸神眷顾的幻想乡 失败总结
- Intel® Nehalem/Westmere架构/微架构/流水线 (4) - 执行引擎
- 2020_12-电路理论框架复习思考-基础篇
- python必背语法_python常用语法合集
- c++ 应用socket实现C/S端文件的传输
- pyqt 把控制台信息显示到_(基础篇 01)在控制台创建对应的应用