什么是equals方法

指示其他某个对象是否与此对象相等,equals方法存在Object类中,我们编写的类继承Object,可以覆盖Object的equals方法来实现我们的逻辑,去判断两个对象是否相等。

Object类中的equals方法

一起来看看Object类中的源代码

public booleanequals(Object obj) {return (this ==obj);

}

我们可以观察到几点:

equals方法是public修饰的,外部类是可以访问的

equals方法的返回值boolean,true为两个对象相等,false为两个对象不等

参数类型为Object,是其子类都可以比较

方法体判断的是两者的引用是不是相等

实际上为什么要编写equals

在我们的实际的操作中,有下面的例子:

@Testpublic voidwhyUseEquals() {

User user1= new User("xujianguo", 21);

User user2= new User("xujianguo", 21);

System.out.println(user1.equals(user2));

}

发user1和user2的name都是xujianguo,age都是21的,按照我们的逻辑是同一个人,都是如果没有重写equals方法,默认采用Object的equals方法的话,结果就是false的,所以我们必须实现equals来实现我们的逻辑。

高质量equals方法

1.使用instanceof操作符检查参数是否为正确的类型

因为equals的参数为Object,你的类是Person,但是这个参数很可能不是Person类型的,可能是User类型的,这样的话就不符合你的判断的,使用instanceof可以判断你的参数是否为正确的你要的处理的类型。

@Overridepublic booleanequals(Object object) {if(!(object instanceofPerson)) {return false;

}else{//...

return true;

}

}

2.把参数转化为正确的类型

在前面进行了类型的判断后,就需要进行类型的转换,转换成需要的类型我们才能进行后续的操作。

@Overridepublic booleanequals(Object object) {if(!(object instanceofPerson)) {return false;

}else{

Person person=(Person)object;//...

return true;

}

}

3.匹配参数中的域情况

这里就是你的逻辑的实现,你的两个对象要怎么样才相等,对于我的这个Person类来说,name一样并且age一样,两个就相等了。

@Overridepublic booleanequals(Object object) {if(!(object instanceofPerson)) {return false;

}else{

Person person=(Person)object;if(person.getName().equals(name) && person.getAge() ==age) {return true;

}else{return true;

}

}

}

4.编写完成equals方法后,检查其三大特性:自反性、对称性、传递性

自反性:对于任何非空引用值x,都有x.equals(x)返回true

对称性:对于任何非空引用值x、y,当x.equals(y)返回true的时候,y.equals(x)也返回true

传递性:对于任何非空引用值x、y、z,当x.equals(y)并且y.equals(z)都返回true的时候,有x.equals(z)返回true

高质量的equals方法必须满足这三大特性

原文:http://www.cnblogs.com/rayguo/p/3777692.html

html equls比较方法,编写高质量equals方法相关推荐

  1. iOS 有效编写高质量Objective-C方法(一)

    欢迎大家关注我的公众号,我会定期分享一些我在项目中遇到问题的解决办法和一些iOS实用的技巧,现阶段主要是整理出一些基础的知识记录下来 文章也会同步更新到我的博客: ppsheep.com 之前有读过E ...

  2. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

                 The reasonable man adapts himself to the world; The unreasonable one persists in trying ...

  3. 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...

    阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法    ...

  4. 《编写高质量Python代码的59个有效方法》——第10条:尽量用enumerate取代range

    本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第10条:尽量用enumerate取代range,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章 ...

  5. 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

  6. 《编写高质量Python代码的59个有效方法》——第19条:用关键字参数来表达可选的行为...

    本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第19条:用关键字参数来表达可选的行为,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章节内容可以 ...

  7. python中如何编写代码输入多个数据并把它们放在一个列表中去_编写高质量Python代码的59个有效方法,你用过几个...

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...

  8. python中如何编写代码输入多个数据并把它们放在一个列表中去_这59条编写高质量Python代码的方法你知道吗?...

    这个周末断断续续的阅读完了<Effective Python之编写高质量Python代码的59个有效方法>,感觉还不错,具有很大的指导价值. 下面将以最简单的方式记录这59条建议,并在大部 ...

  9. 读《编写高质量iOS与OS X代码的52个有效方法》

    又看了一遍<编写高质量iOS与OS X代码的52个有效方法>这本书,做一个简单的总结,其中runtime和GCD那些的不是太详细,要想很详细估计写的东西比篇文字都多,但恰巧又是iOS的重点 ...

最新文章

  1. 导入旧版本Android项目时的“Unable to resolve target ‘android
  2. Android自定义RulerView
  3. X window的思想和终端的重大意义
  4. Java 理论与实践: 正确使用 Volatile 变量--转
  5. 使用Ant Design 和Vue,React中后台开发套餐
  6. c++中同名函数的三个不同术语(c++细节篇八)
  7. 文本输入框的两种div+css的写法
  8. java war包 加密_Java加密jar包流程
  9. oracle10非正常删除卸载干净,Oracle 10g卸载干净
  10. 三网融合融什么融,团购网站团什么团【涂雅速涂】
  11. Gabor滤波器详解
  12. 测试经典名言100句
  13. 这几年被分布式坑惨了,曝光十大坑
  14. 你为什么必须(从现在开始就)掌握linux
  15. HMM隐马尔可夫模型进行中文文本分词
  16. PHP一句话木马Webshell变形免杀总结
  17. Windows10下VTR.7中VPR项目的运行
  18. 教师超实用的微课制作软件
  19. GIS系统在房产信息平台中的作用
  20. 商城搜索DSL elasticsearch 相关代码

热门文章

  1. leetcode 179 python
  2. leetcode lcp2 分式化简
  3. java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...
  4. C语言课后习题(61)
  5. C语言课后习题(35)
  6. Tensorflow——张量
  7. 计算机实训教学论文,计算机实训教学探索论文
  8. 2020年4月数据库流行度排行:MySQL 成事实王者,国产openGauss引期待
  9. DBA/运维人员近期直播活动日历
  10. stm32移植freemodbusRTU(HAL库+Freertos)主机