覆写equals方法
我们在写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方法相关推荐
- [改善Java代码]覆写equals方法必须覆写hashCode方法
覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...
- 不要在覆写的方法中用super
@Override是语义的检查,IDE会检查父类是否存在对应的方法,如果有,则检查是否允许覆写,如果是final则不允许,否则编译成功. 但是在子类覆写的方法调用super则没有了覆写的意义,而具有扩 ...
- UINavgationController中覆写preferredStatusBarStyle方法不执行的问题
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- ...
- java.equal例子_Java中的== 和equals()方法详解与实例
Java中的== 和equals()方法: Java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型. byte,short,char,int,long,float,double,boo ...
- java 对象equals_浅谈Java对象的equals方法
相等与同一: 如果两个对象具有相同的类型以及相同的属性值,则称这两个对象相等. 如果两个引用对象指的是同一个对象,则称这两个变量同一. ==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的 ...
- java中equals的重写_Java重写equals方法(重点讲解)
为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往 ...
- python字符串equals方法_编写equals方法
我们知道List是一种有序链表:List内部按照放入元素的先后顺序存放,并且每个元素都可以通过索引确定自己的位置. List还提供了boolean contains(Object o)方法来判断Lis ...
- review——C# (6)虚方法和覆写方法
FROM P125 在上一节中看到,当使用基类引用访问派生类对象时,得到的是基类的成员.虚方法可以使基类的引用访问"升至"派生类内. 可以使用基类引用调用派生类(derived c ...
- Java中field的覆写_Java中方法的覆写
[套装4本]java编程思想4第4版+ 402.5元 包邮 (需用券) 去购买 > 一.方法的重写概念 之前说了子类如果继承了一个父类,那么子类就会拥有父类的方法(不包括构.造方法)和属性,此时 ...
最新文章
- 月薪50K的机器学习工程师,需要具备哪些条件?
- FPGA的设计艺术(2)FPGA开发流程
- SqlServer 行转列
- django学习笔记之forloop
- php 定义函数和访问,PHP-预定义函数访问数据库
- msmtp在RHEL6.5下的安装
- centos 6.7 安装 最新版 git
- DeePMD-kit的conda安装方法以及速度慢的解决方案
- win8 性能测试软件,首款支持Win8性能测试 新版3D Mark使用体验
- 客户端(https)与服务器交互过程
- 【暗恋不可耻但无用】QQ空间爬虫-Python版(pyzone-crawler)
- MAC常用java开发软件
- 百度移动开放平台认领应用--apk 空包签名
- 组装服务器3c,服务器3C认证如何办理
- 取消和卸载Office 2010默认安装的微软拼音输入法的方法
- 为什么架构师工资比运维高?
- nginx设置cookie
- vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析
- android 内存溢出问题分析
- 我大一的线性代数学习