我们在写java类时,经常会覆写equals()方法,目的是根据业务判断两个对象是否相等。我们写一个Person类,会根据姓名来判断两个实例对象是否相同,代码如下:

class Person{private String name;public Person(String _name){name = _name;}public void setName(String name){this.name = name;}public String getName(){return name;}public boolean equals(Object obj){if(obj instanceof Person){Person p = (Person)obj;return name.equalsIgnoreCase(p.getName().trim());}return false;}
}

覆写的equals()做了很多校验,考虑到从web上传递过来的对象有可能输入了空格,所以用trim()方法进行了清除,接下来是main方法来检验是否正确。

public class Client{ public static void main(String[] args){Person p1 = new Person("张三 ");Person p2 = new Person("张三");List<Person> l = new ArrayList<Person>();l.add(p1);l.add(p2);System.out.println("列表中是否包含张三:" + l.contains(p1));System.out.println("列表中是否包含张三:" + l.contains(p2));} }

结果如下:

经过改善将trim()截取方法去掉,这样就完全正确。但接下来又有一个新的问题,当传入的值中有null时,我们应该怎样来判断呢?将Person中的类加上null的判断即可,代码如下:

public boolean equals(Object obj){if(obj instanceof Person){Person p = (Person)obj;if(p.getName()==null ||name == null){return false;}else{return name.equalsIgnoreCase(p.getName());}}return false;}

这样就对java中常用的判断相等的方法进行了重写,重写之后即使是同时创建了两个对象,只要对象名相等,就可以认为这是相等的。当然我们也可以根据我们在项目中的不同需求,来进行覆写我们的equals方法,比如当需要判断员工号和姓名都对应时才是同一个员工,这样就可以在equals中进行修改,使之更合理。

覆写equals方法相关推荐

  1. [改善Java代码]覆写equals方法必须覆写hashCode方法

    覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...

  2. 不要在覆写的方法中用super

    @Override是语义的检查,IDE会检查父类是否存在对应的方法,如果有,则检查是否允许覆写,如果是final则不允许,否则编译成功. 但是在子类覆写的方法调用super则没有了覆写的意义,而具有扩 ...

  3. UINavgationController中覆写preferredStatusBarStyle方法不执行的问题

    #import "ViewController.h"@interface ViewController ()@end@implementation ViewController- ...

  4. java.equal例子_Java中的== 和equals()方法详解与实例

    Java中的== 和equals()方法: Java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boo ...

  5. java 对象equals_浅谈Java对象的equals方法

    相等与同一: 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等. 如果两个引用对象指的是同一个对象,则称这两个变量同一. ==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的 ...

  6. java中equals的重写_Java重写equals方法(重点讲解)

    为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...

  7. python字符串equals方法_编写equals方法

    我们知道List是一种有序链表:List内部按照放入元素的先后顺序存放,并且每个元素都可以通过索引确定自己的位置. List还提供了boolean contains(Object o)方法来判断Lis ...

  8. review——C# (6)虚方法和覆写方法

    FROM P125 在上一节中看到,当使用基类引用访问派生类对象时,得到的是基类的成员.虚方法可以使基类的引用访问"升至"派生类内. 可以使用基类引用调用派生类(derived c ...

  9. Java中field的覆写_Java中方法的覆写

    [套装4本]java编程思想4第4版+ 402.5元 包邮 (需用券) 去购买 > 一.方法的重写概念 之前说了子类如果继承了一个父类,那么子类就会拥有父类的方法(不包括构.造方法)和属性,此时 ...

最新文章

  1. 月薪50K的机器学习工程师,需要具备哪些条件?
  2. FPGA的设计艺术(2)FPGA开发流程
  3. SqlServer 行转列
  4. django学习笔记之forloop
  5. php 定义函数和访问,PHP-预定义函数访问数据库
  6. msmtp在RHEL6.5下的安装
  7. centos 6.7 安装 最新版 git
  8. DeePMD-kit的conda安装方法以及速度慢的解决方案
  9. win8 性能测试软件,首款支持Win8性能测试 新版3D Mark使用体验
  10. 客户端(https)与服务器交互过程
  11. 【暗恋不可耻但无用】QQ空间爬虫-Python版(pyzone-crawler)
  12. MAC常用java开发软件
  13. 百度移动开放平台认领应用--apk 空包签名
  14. 组装服务器3c,服务器3C认证如何办理
  15. 取消和卸载Office 2010默认安装的微软拼音输入法的方法
  16. 为什么架构师工资比运维高?
  17. nginx设置cookie
  18. vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析
  19. android 内存溢出问题分析
  20. 我大一的线性代数学习

热门文章

  1. 带你玩转新一代无服务器产品:IBM Cloud Code Engine(二)
  2. 2021年6月电子学会图形化一级编程题解析含答案:奔跑的马
  3. 不废话,分享一个我学习的捷径
  4. oracle 行转列字符拼接,oracle 行转列,用特殊符号拼接
  5. 15.系统限制和选项
  6. Python-Django毕业设计服装创意定制管理系统(程序+Lw)
  7. 容器十年:一部软件交付编年史
  8. 当数字化成为品牌转型必由之路,奢侈品行业如何再度出奇?
  9. 解决Win10搜索框没有反应
  10. linux添加源ip路由命令,linux添加ip、路由相关命令