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。

Java Object类中的equals方法的更多相关文章

  1. Object 类中的 equals方法

    1 相等与同一 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等.如果两个引用对象指的是同一个对像,则称这两个变量同一.Object类中定义的equals 函数原型为:public bo ...

  2. 重写Object类中的equals方法

    Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类 public class Student { //姓名.学号.年纪 private S ...

  3. Java Object类中toString方法的重写

    Object类中的tostring方法的: 当我们输出一个对象时,实际是输出的是这个类中的tostring方法,是一个地址值,而不是类中的属性. 1 一:子类没有重写Object类中的toStrinn ...

  4. String类中的equals()方法:

    String类中的equals()方法: public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { ret ...

  5. 25. object类中的一些方法分析

    1. Object java是面向对象语言,所以其核心思想: 找合适的对象,做合适的事 Object是所有类的终极基类.任何一个类都继承了Object类 2. Object的部分函数列表 1)Stri ...

  6. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  7. Java——String类中的compareTo方法总结

    String类的定义:    java.lang  类 String   java.lang.Object      java.lang.String 所有已实现的接口:Serializable, C ...

  8. Object类中常见的方法,为什么wait notify会放在Object里边

    toString():输出一个对象的地址字符串(哈希code码):可以通过重写toString方法,获取对象的属性! equals():比较的是对象的引用是否指向同一块内存地址, 重写equals() ...

  9. 一、基础篇--1.1Java基础-Object类中常见的方法,为什么wait notify会放在Object里边

    这是个设计相关的问题,它考察的是面试者对现有系统和一些普遍存在但看起来不合理的事物的看法.回答这些问题的时候,你要说明为什么把这些方法放在Object类里是有意义的,还有不把它放在Thread类里的原 ...

随机推荐

  1. 初识MQ消息队列

    MQ 消息队列 消息队列(Message Queue)简称MQ,是阿里巴巴集团中间件技术部自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息发布订阅.消息轨迹查询.定时(延时)消息.资 ...

  2. ArrayList、Vector、LinkedList 区别及底层实现

    一.ArrayList.Vector.LinkedList 三者区别 1.ArrayList  底层:是数组结构,查询快,增删慢,线程不安全,效率高.2.LinkedList底层:是链表数据结构,查询 ...

  3. Jmeter系列(35)- 使用 ServerAgent 监控服务器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 做性能测试,监控服务器资源指标是 ...

  4. python字典套字典

    定义字典 familyinfo = { "family name":"Python", "family structure":[ {&quo ...

  5. JavaScript基础对象创建模式之静态成员(027)

    在支持“类”的面向对象语言中,静态成员指的是那些所有实例对象共有的类成员.静态成员实际是是“类”的成员,而非“对象”的成员.所以如果 MathUtils类中有个叫 max()的静态成员方法,那么调用这 ...

  6. Centos7上设置zookeeper自启动

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zhouzhiwengang/artic ...

  7. 洛谷 P1025 【数的划分】

    进入正题 思路:递归 这道题有点像放苹果: 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 转化一下就有: 把n个苹果放在k个 ...

  8. 解决wpf项目中无法添加OpenFileDialog 实例的问题

    直接添加引用:using Microsoft.Win32; 或者放置鼠标于OpenFileDialog OpenFileDialog ofd = new OpenFileDialog(); 操作点击

  9. Python3笔记010 - 3.1 程序结构

    第3章 流程控制语句 3.1 程序结构 程序设计的基本结构: 顺序结构---顺序执行所有语句 选择结构---选择执行部分语句 循环结构---循环执行部分语句 1.顺序结构 按照顺序执行语句. 2.选择 ...

  10. SpringMVC的项目架构思想

    SpringMVC的项目架构思想 一.DO和Model的区别 DO是对数据库表的映射.Model是处理业务逻辑的模型(领域模型).例如:用户信息表和用户密码表分别是两个DO,但是对于实体用户来说,密码 ...