Object类中的equals方法用于检测一个对象是否等于另外一个对象。在Object类中,这个方法将判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。从这点上看,将其作为默认操作也是合乎情理的。然而,对于多数类来说,这种判断并没有什么意义。例如,采用这种方法比较两个PrintStream对象是否相等就完全没有意义。然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的。

  下面采用以下示例演示equals方法的实现机制:

public class Employee{
...
public boolean equals(Object otherObject){
//快速检查对象是否相同
if(this==otherObject) return true; //如果EcPLID参数为空,则必须返回false
if(otherObject==null) return false; //如果类不匹配,它们就不能相等。
if(getClass()!=otherObject.getClass())
return false; //现在我们知道另一个对象是非空雇员
Employee other =(Employee)otherObject; //测试字段是否具有相同的值
return Object.equals(other.name);
&& salary==other.salary
&& hireDay.equals(other.hireDay);
}
}

  getClass方法将返回一个对象所属的类,有关这个方法的详细内容稍后进行介绍。在检测中,只有在两个对象属于同一个类时,才有可能相等。

  提示:为了防备name或hireDay可能为null的情况,需要使用Object.equals方法。如果两个参数都为null,Object.equals(a,b)调用将返回true;如果其中一个参数为null,则返回false;否则,如果两个参数都不为null,则调用a.equals(b)。利用这个方法,Employee的方法equals的最后一条语句要改写为:

return name.equals(name,other.name);
&& salary==other.salary
&& Object.equals(hireDay,other.hireDay);

  Java语言规范要求equals方法具有下面的特性:

  1) 自反性:对于任何非空引用x,x.equals(x)应该返回true。

  2) 对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true。

  3) 传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回true。

  4) 一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果。

  5) 对于任何非空引用x,x.equals(null)应该返回false。

最新文章

  1. SSH框架整合(全注解)
  2. Eclipse调试常用技巧
  3. [原创]java WEB学习笔记107:Spring学习---AOP切面的优先级,重用切点表达式
  4. DiscuzX 论坛首页 和 分 区设置版块横排
  5. COGS 902 乐曲主题 题解 & hash入门贺
  6. 一步一步学习SignalR进行实时通信_1_简单介绍
  7. 最近工作用到的sql脚本
  8. Yeoman:适合现代Web应用的现代工作流
  9. 《Javascript高级程序设计》读书笔记之对象创建
  10. Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
  11. PAT-013 L1-013. 计算阶乘和
  12. Android 如何避免运行时奔溃
  13. JERSEY中文翻译(第三章、JAX-RS Application, Resources and Sub-Resources)
  14. HDUOJ----1181 变形课
  15. json文件为空时读取会报错
  16. 【node.js】Buffer(缓冲区)
  17. Java Web 生成临时文件并下载
  18. 一个TCP报文段的数据部分最多为多少个字节,为什么
  19. 第60天:js常用访问CSS属性的方法
  20. scala学习手记38 - 方法命名约定和for表达式

热门文章

  1. SpringCloud教程第4篇:Hystrix(F版本)
  2. 8.eclipse 安装 lombook插件
  3. PHP开发环境搭建工具有哪些?
  4. STL初步学习(set)
  5. JVM源码分析之堆内存的初始化
  6. CF819B Mister B and PR Shifts 题解
  7. 结合实际需求,在webapi内利用WebSocket建立单向的消息推送平台,让A页面和服务端建立WebSocket连接,让其他页面可以及时给A页面推送消息
  8. ecs架构思考
  9. Hexo学习
  10. 协同合约HACKATHON 0X03;