Object类的equals方法默认比较的是两个对象的地址值,没有意义

所以我们需要重写equals方法,比较两个对象的属性值(name,age等等);

对象的属性值一样返回true否则返回false

问题:

隐含着一个对套

Object obj = p2 = new Person("古力娜扎",18);

多条弊端:

无法使用子类特有的内容(属性,方法)

解决:可以使用向下转型(强转)把Object类型转换为Person

Person person = (Person) o;

    @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
} class Test{
public static void main(String[] args){
Person p1 = new Person("张三",11);
Person p2 = new Person("张三",11); System.out.println(p1.equals(p2));//true
}
}

在刚才IDEA自动重写的equals代码中,使用到了java.util.Objects类,那么这个类是什么呢?

在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它有一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-toleran(容忍空指针的)

用于计算对象的hashcode。返回对象的字符串表示形式,比较两个对象

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题方法如下

public static boolean equals(Object a,Object b);//判断两个对象是否相等

源码:

public static boolean equals(Object a,Object b){
return (a==b) || (a!=null && a.equals(b));
} public class Test02 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = null; /* boolean b = str2.equals(str1);//NullPointerException null是不能调用方法的,会抛出空指针异常
System.out.println(b);*/ boolean b = Objects.equals(str1, str2);//false
System.out.println(b);
}
}

最新文章

  1. PHP curl 函数
  2. 查看MySQL配置文件路径及相关配置
  3. Android实现简单音乐播放器(MediaPlayer)
  4. JS倒计时 代码
  5. Linux下查看系统配置
  6. JavaScript:Object.prototype.toString方法的原理
  7. ES6 新增命令
  8. 鸟哥Linux学习笔记06
  9. .NET Core单文件发布静态编译AOT CoreRT
  10. python基础之实现sql增删改查
  11. -ms、-moz、-webkit -o
  12. VMware虚拟机CentOS7网络通信与无线上网
  13. 数据合并处理concat
  14. js 的date的format时间,获取当前时间,前一天的日期
  15. c# 静态方法和数据
  16. json加密
  17. oracle-闪回技术2
  18. 简短介绍 C# 6 的新特性
  19. 嵌入式开发之hi3519--- pcie dma和dma cache 缓存更新sync memery
  20. PHP中header('content-type:text/html;charset="utf-8')和error_reporting()的作用

热门文章

  1. Docker中Nginx,部署Tomcat,部署es + kibana,Docker的可视化,Commit镜像
  2. 实验:Python图形图像处理
  3. spring boot 中接口参数为枚举时的反序列化配置(总结)
  4. hihocoder 1193 树堆 解题报告
  5. Flask 之 高可用IP代理网站
  6. django框架2
  7. Python 3函数的参数冒号注释
  8. FFT 小记
  9. c++ 快速乘
  10. CVPR2022 | A ConvNet for the 2020s & 如何设计神经网络总结