在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方法相关推荐

  1. java if equals_Java中判断对象是否相等的equals()方法使用教程

    Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认 ...

  2. java的equals方法_在Java中编写完美的equals方法

    相对于C++,Java并没有重载操作符,所以对于非基本类型都需要使用equals方法比较相等性.Object提供了equals方法比较两个对象,但对于用户自定义类而言Object提供的版本仅仅比较两个 ...

  3. Java黑皮书课后题第8章:*8.31(几何:交点)编写一个方法,返回两条直线的交点。四个点存放在4*2的二维数组points中。编写一个程序,提示用户输入4个点,并显示交点

    *8.31(几何:交点)编写一个方法,返回两条直线的交点.四个点存放在4*2的二维数组points中.编写一个程序,提示用户输入4个点,并显示交点 题目 题目描述 破题 代码 本题运行实例 题目 题目 ...

  4. Java黑皮书课后题第6章:*6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序。使用下面的方法体编写一个计算税款的方法。使用这个方法编写程序,打印可征税人从50000到60000间隔

    *6.15(金融应用:打印税表)程序清单3-5给出了计算税款的程序.使用下面的方法体编写一个计算税款的方法.使用这个方法编写程序 题目 题目描述 破题 程序清单3-5(非本题):代码不全 补充代码:编 ...

  5. java怎么统计随机数出现次数,Excel统计出现次数、个数的VBA代码 java中怎么判断一个字符串中包含某个字符或字...

    延伸:java中怎么判断一个字符串中包含某个字符或字符 描述:...一个字符串中包含某个字符的单词说出现的次数 c#什么方法可以判断字符串中包含某个字符的个数? JAVA判断字符串数组中是否包含某字符 ...

  6. Java中怎么样检查一个字符串是不是数字呢

    问题:Java中怎么样检查一个字符串是不是数字呢 在解析之前,怎么样检查一个字符串是不是数字呢 回答一 这些通常是由一个简单的用户自定义函数去解决的(即,自带的 "isNumeric&quo ...

  7. 在Java中如何从一个多层嵌套循环中直接跳出?

    一.问题描述 最近发现一个有趣的问题,在Java中如何从一个多层嵌套循环中退出呢? 例如下面,有两层循环,break只能退出第一个for循环,不能直接跳出第二个for循环外面. public stat ...

  8. java 需要返回类型_在Java中,当一个方法不需要返回数据时返回类型必须是

    [问答题]在滑动轴承中什么是瓦背?其特点有哪些? [多选题]起重机采用变频调速改造后,有哪些效果? [判断题]当热继电器动作不准确时,可用弯折双金属片的方法来调整. [单选题]X62W型万能铣床进给电 ...

  9. 怎样设置一个函数C语言,C语言中怎样编写一个函数 如何在C语言中定义一个函数?...

    如何在C语言中定义一个函数?小编很想在你面前流泪最后却还是选择装作打个哈欠 为什么小编怎么定义函数都不正确呢? 总是说小编 表达语法错误在main函数中 小编们可以在头文件与main函数之间定义,并编 ...

最新文章

  1. html单行注释符号
  2. JavaScript——this、constructor、prototype
  3. Oracle的连接与会话
  4. c#根据年份和月份获得本月最后一天
  5. 四. python的time和datetime 模块
  6. 奥委会主席巴赫与马云对谈:阿里巴巴能将奥运精神带进科技时代
  7. Javascript 笔记(1)----函数
  8. python编辑器_python编辑器,作为小白该如何抉择?
  9. 计算机网络在实践教学,高职计算机网络技术实践教学研究
  10. 是Dubbo不香了吗?阿里为啥又搞一套Spring Cloud Alibaba?
  11. selenium-标签元素定位法-0223
  12. 关于 Docker ,你必须了解的核心都在这里
  13. Linux基础—3.Linux基础命令总结【有图有真相】
  14. 第一次在CSND做记录,关于linux修改文件的最后访问时间。
  15. SQL Server 创建索引(index)
  16. linux的cd命名返回上级目录,返回根目录
  17. conda 环境复制
  18. 《商用密码应用与安全性评估》第四章 密码应用安全性评估实施要点-小结
  19. 车道线分割项目记录-模型构建
  20. (JAVA)错误:Type mismatch: cannot convert from double to float ,这是什么意思?如何解决?

热门文章

  1. 【BZOJ1084】【codevs2454】最大子矩阵,DP
  2. 【BZOJ2438】杀人游戏,tarjan缩点+简单的概率计算
  3. 18.外部相机校准——刚体变换,变换和旋转,外参数矩阵 测验_3
  4. bzoj2245 [SDOI2011]工作安排 费用流
  5. 2017.10.22 诸神眷顾的幻想乡 失败总结
  6. Intel® Nehalem/Westmere架构/微架构/流水线 (4) - 执行引擎
  7. 2020_12-电路理论框架复习思考-基础篇
  8. python必背语法_python常用语法合集
  9. c++ 应用socket实现C/S端文件的传输
  10. pyqt 把控制台信息显示到_(基础篇 01)在控制台创建对应的应用