阅读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 ...
随机推荐
- JavaScript之Object.defineProperty()
1. 对象的定义与赋值 经常使用的定义与赋值方法obj.prop =value或者obj['prop']=value let Person = {}; Person.name = "Jack ...
- 2024新版本如何配置CLion与cubeMX开发STM32
2024新版本如何配置CLion与cubeMX开发STM32 1. 为什么我要在网上有很多教程的情况下再做一个新版 各种大佬们给出的配置教程原本很详细,但是在时间过了这么久之后已经不完全符合现在的环境 ...
- Windows 系统下 Docker 和 Docker Compose 安装配置:一键部署有来开源项目本地环境
作者主页: 有来技术 开源项目: youlai-mall vue3-element-admin youlai-boot vue-uniapp-template 仓库主页: GitCode Gitee ...
- 2022 年万圣节 Github 彩蛋
记录每年 Github 万圣节彩蛋,也记录有来项目成长历程. 2022 万圣节彩蛋 2021 万圣节彩蛋 2020 万圣节彩蛋
- org.junit.Assert
引入包,以下两种方式都是OK的,看个人喜好,我倾向于使用第二种,会更加清晰直观.下面的代码我都会用第二种 import static org.junit.Assert.*; import org.ju ...
- 消息中间件之-Kafka相关知识
前言 本篇文章是我基于拉勾kafka课程所作的笔记,包括Kafka基本架构.核心概念.生产者解析.消费者解析.存储.事务.一致性保证等等,希望对大家有所帮助. 一.kafka架构 Kafka基础知识 ...
- spring事务配置的5种方式
事务配置其实把思路理清,还是很容易的. spring的配置文件中关于事务配置总是由三个部分组成:分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一 ...
- 浅析IPV6单栈的优缺点
本文分享自天翼云开发者社区<浅析IPV6单栈的优缺点>,作者:赵****越 IPv6单栈是一种仅使用IPv6协议栈的方案,与IPv4单栈相比,它具有更大的地址空间.更高的安全性和更好的隐私 ...
- Flink客户端操作
一.mysql数据准备 mysql -hip -uroot -p密码 CREATE DATABASE flink; USE flink; CREATE TABLE user ( id INTEGER ...
- flutter-TextField垂直居中
decoration: InputDecoration( contentPadding: EdgeInsets.symmetric(vertical: 0), // border: InputBord ...