html equls比较方法,编写高质量equals方法
什么是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方法相关推荐
- iOS 有效编写高质量Objective-C方法(一)
欢迎大家关注我的公众号,我会定期分享一些我在项目中遇到问题的解决办法和一些iOS实用的技巧,现阶段主要是整理出一些基础的知识记录下来 文章也会同步更新到我的博客: ppsheep.com 之前有读过E ...
- 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
The reasonable man adapts himself to the world; The unreasonable one persists in trying ...
- 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法 ...
- 《编写高质量Python代码的59个有效方法》——第10条:尽量用enumerate取代range
本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第10条:尽量用enumerate取代range,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章 ...
- 表示python代码块的是_编写高质量Python代码的59个有效方法,你用过几个
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...
- 《编写高质量Python代码的59个有效方法》——第19条:用关键字参数来表达可选的行为...
本节书摘来自华章社区<编写高质量Python代码的59个有效方法>一书中的第19条:用关键字参数来表达可选的行为,作者[美]布雷特·斯拉特金(Brett Slatkin),更多章节内容可以 ...
- python中如何编写代码输入多个数据并把它们放在一个列表中去_编写高质量Python代码的59个有效方法,你用过几个...
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 这个周末断断续续的阅读完了<Effectiv ...
- python中如何编写代码输入多个数据并把它们放在一个列表中去_这59条编写高质量Python代码的方法你知道吗?...
这个周末断断续续的阅读完了<Effective Python之编写高质量Python代码的59个有效方法>,感觉还不错,具有很大的指导价值. 下面将以最简单的方式记录这59条建议,并在大部 ...
- 读《编写高质量iOS与OS X代码的52个有效方法》
又看了一遍<编写高质量iOS与OS X代码的52个有效方法>这本书,做一个简单的总结,其中runtime和GCD那些的不是太详细,要想很详细估计写的东西比篇文字都多,但恰巧又是iOS的重点 ...
最新文章
- 导入旧版本Android项目时的“Unable to resolve target ‘android
- Android自定义RulerView
- X window的思想和终端的重大意义
- Java 理论与实践: 正确使用 Volatile 变量--转
- 使用Ant Design 和Vue,React中后台开发套餐
- c++中同名函数的三个不同术语(c++细节篇八)
- 文本输入框的两种div+css的写法
- java war包 加密_Java加密jar包流程
- oracle10非正常删除卸载干净,Oracle 10g卸载干净
- 三网融合融什么融,团购网站团什么团【涂雅速涂】
- Gabor滤波器详解
- 测试经典名言100句
- 这几年被分布式坑惨了,曝光十大坑
- 你为什么必须(从现在开始就)掌握linux
- HMM隐马尔可夫模型进行中文文本分词
- PHP一句话木马Webshell变形免杀总结
- Windows10下VTR.7中VPR项目的运行
- 教师超实用的微课制作软件
- GIS系统在房产信息平台中的作用
- 商城搜索DSL elasticsearch 相关代码
热门文章
- leetcode 179 python
- leetcode lcp2 分式化简
- java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...
- C语言课后习题(61)
- C语言课后习题(35)
- Tensorflow——张量
- 计算机实训教学论文,计算机实训教学探索论文
- 2020年4月数据库流行度排行:MySQL 成事实王者,国产openGauss引期待
- DBA/运维人员近期直播活动日历
- stm32移植freemodbusRTU(HAL库+Freertos)主机