阅读IDEA生成的equals方法--java进阶day05
1.IDEA生成的equals方法
虽然我们之前写了equals方法,但IDEA中可以快速生成equals方法,因此,我们要能看懂IDEA生成的equals方法

1.if(this==o)

2.if(o==null)
我们将第二个if的一大段分为两段进行分析
当代码走到第二个if了,说明stu1肯定不是null,否则就空指针异常,根本不可能走到第二个if

stu1不是null,那就只有stu2可能为null

3.第二个if后半段
第二个if使用的是||,遇真则不再执行后面的内容,当stu2真为null时,就会快速return false

如果stu2不是null,就还会继续执行后半段
后半段的getClass方法来源于Object,用于判断字节码类型

4.向下转型
当代码能走到向下转型时,说明两个对象的字节码相同,对应的类型肯定相同,因此直接转型然后进行比较即可

2.Objects
刚才IDEA生成的equals方法里,比较的时候使用的是Objects的equals方法,所以,我们还需要了解这个类

.

1.Objects.equals
了解了Objects类,我们试着调用它的equals方法
我们发现Objects类调用的equals方法和自己写的equals方法功能是一致的

.

Objects类的equals方法依赖于我们写的equals方法
当我们把自己重写的equals方法删除后,重新调用Objects的equals方法

.

即使两个对象的属性一模一样,但打印结果是false,说明比较的是地址
2.Objects.equals的好处
Objects类的equals方法内部带有非空判断,假设stu1是null,调用了equals方法肯定会引发空指针异常,导致后续的代码逻辑无法运行,但使用Objects的equals方法则不会有这些问题

.

3.Objects.equals的代码逻辑分析
1.(a==b)

2.a!=null

阅读IDEA生成的equals方法--java进阶day05的更多相关文章
- 使用hashCode()和equals()方法 - Java
在这篇文章中,我将指出我对hashCode()和equals()方法的理解.我将讨论它们的默认实现以及如何正确地覆盖它们.我还将使用Apache Commons包中的实用工具类来实现这些方法. has ...
- 关于==和equals()方法&Java中string与char如何转换&String,StringBuffer
1.对于基本数据类型,可以直接使用==和!=进行内容比较 如:int x=30; int y=30; x==y; //true 基本数据类型 简单类型(基本类型) bo ...
- Java探索之旅(12)——equals方法及其覆盖
1.Object中的equals方法 java中的的基本数据类型:byte,short,char,int,long,float,double,boolean.==比较的是值. ❶作用:对于复合类型来说 ...
- 为什么要重写hashCode()方法和equals()方法及如何重写
我想写的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法 2.在什么情况下需要重写hashCode()方法和equals()方法 3.如何重写这两个方法 **** ...
- java10-3 equals方法
public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”. 该方法,默认情况下比较的是地址值.但是,如果只是比较地址值的话,一般来说意义不大,所以要 ...
- toString()和equals()方法详解
一:toString()方法 Object中toString方法 public String toString() { return getClass().getName() + "@&qu ...
- Java中“==”与equals方法的区别
1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:St ...
- java重写equals方法
@Override public int hashCode() { return task.getId(); } @Override public boolean equals(Object obj) ...
- JAVA中“==”与equals()方法区别
equals 方法是 java.lang.Object 类的方法 有两种用法说明: ()对于字符串变量来说,使用"=="和"equals()"方法比较字符串时, ...
- Java 中正确使用 hashCode 和 equals 方法
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: hash ...
随机推荐
- 高通MSM8909 Mutil-HAL Sensor 调试
Mutil-HAL的介绍: Sensors Multi-HAL 是一个框架,允许传感器 HAL 与其他传感器 HAL 一起运行. Sensors Multi-HAL 动态加载作为动态库存储在供应商分区 ...
- WPF 资源定义空字符串或者空格问题
xmlns:sys="clr-namespace:System;assembly=mscorlib" WPF在XAML的资源中定义空字符串String.Empty 代码如下: &l ...
- Shiftdel walkthrough Intermediate
点击查看代码 nmap -p- -A 192.168.167.174 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-12 00:09 UT ...
- 3. 使用sql查询csv/json文件内容,还能关联查询?
1. 简介 我们在前面的文章提到了calcite可以支持文件系统的数据源适配, 其实官方已经提供了相应的能力, 其支持csv和json的查询适配, 废话不多说, 直接展示. 2. Maven < ...
- Huawei LiteOS基于Cortex-M4 GD32F4平台移植
1.Huawei LiteOS简介 Huawei LiteOS源码获取: https://github.com/LiteOS/LiteOS, https://gitee.com/LiteOS/Lite ...
- 『Python底层原理』--CPython如何编译代码
前一篇我们介绍了CPython VM的运行机制,它基于一系列字节码指令来实现程序逻辑. 不过,Python字节码在完整描述代码功能上存在局限性,于是代码对象应运而生.像模块.函数这类代码块的执行,本质 ...
- WAIC 2024盛大召开,天翼云以全栈智算能力赋能AI时代!
7月5日,2024世界人工智能大会期间,中国电信星辰人工智能生态论坛在上海世博中心启幕.论坛以"星辰注智,焕新领航"为主题,围绕人工智能技术发展趋势,分享中国电信与产业各界在人工智 ...
- HPC中常见的调度器介绍
本文分享自天翼云开发者社区<HPC中常见的调度器介绍> 作者:土豆炒肉丝 在高性能计算(HPC)环境中,调度器是负责管理和分配计算资源(如计算节点.处理器核心.内存等)给待执行任务的重要组 ...
- nginx 编译安装及配置解析
一.编译安装 安装插件 安装需要的组件 yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel ...
- CAD内核的奥秘 | 工业软件发展史 (转)
CAD内核的奥秘 | 工业软件发展史 (声明:此文非本人原著,仅供交流,如果侵犯到原作者权利,立即删除) 如果一个产业要寻根,就会发现一个万千世界,最后会聚焦到一个点上. "一沙一世界&qu ...