equals方法:黑马版

news2024/11/17 12:30:13

目录

Object类的equals方法

Student类

测试类

第一步:使用==比较

第二步:使用equals比较

第三步:在子类-Student类中重写equals方法

代码逐句分析

运行


Object类的equals方法

首先写一个类Student,属性有name和age,然后创建两个Student对象,并分别给赋值,然后比较两个对象

Student类

package com.hspedu.equalsheima;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
}

测试类

package com.hspedu.equalsheima;

public class ObjectDemo {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(65);
        Student s2 = new Student();
        s2.setName("林青霞");
        s2.setAge(65);
        System.out.println(s1 == s2);//比较两个对象的地址
      
    }
}

第一步:使用==比较

因为==在比较引用类型数据的时候,是比较两个对象的地址是否相同,s1和s2指向不同的地址空间,所以结果为false

第二步:使用equals比较

 此时使用的是Object类中的equals方法,此时比较的还是两个对象的地址,结果还是false

源代码:用ctrl+B调出

对源代码的分析:1)传入一个Object类对象,然后比较 2) Object类中的equals方法,默认比较的是地址

在这个案例中 this就是指调用方法的对象,即s1;obj就是s2

//this------->s1
//obj ------->s2

第三步:在子类-Student类中重写equals方法

使用Alt + Insert快捷键在Student类中重写父类-Object类的equals方法

 public boolean equals(Object o) {
    /*
      this --- s1
      o  ---s2
     */
    //比较地址是否相同,如果相同,直接返回true
    if (this == o) return true;

   
    if (o == null || getClass() != o.getClass()) return false;

  
    Student student = (Student) o;// student = s2;

    if (age != student.age) return false;

 
    return name != null ? name.equals(student.name) : student.name == null;
}

代码逐句分析

if (this == o) return true;//比较地址是否相同
if (o == null || getClass() != o.getClass()) return false;

1)o == null :首先判断传入的参数s2是否为null;如果为null,返回false

2)getClass() != o.getClass():判断s1和s2是否来自同一个类

3)如果判断结果为true,表示不是同一个类,那么内容肯定不会相等,返回false

4)||短路或,有真为真,只要满足上述任一条件,就返回false

Student student = (Student) o;//在传参的时候完成了向上转型,此时再向下转型
if (age != student.age) return false;//判断s1和s2的age,如果不相同,返回false
return name != null ? name.equals(student.name) : student.name == null;

上述语句是一个三元运算符:规则一真大师

1) name != null?如果结果为true,则返回name.equals(student.name)的比较结果

2)name.equals(student.name):比较字符串的内容是否相同;

3)String类是Object类的子类,重写了Object类的equals方法,所以可以比较内容(韩顺平equals方法)

4)如果name != null的结果为false,说明s1=null,此时接收student.name == null的返回结果

运行

在重写过后就可以比较内容,此时的结果就是true而非false

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5笔记【十二】蓝图函数BluePrint Function

上一篇讲了蓝图变量,这一篇说蓝图函数。BluePrint Function 函数,一般是为了将一段功能的代码提取出来,然后方便我们反复使用。重复的代码可以提取一个函数。类似的,相同的蓝图,我们也可以提取出一个蓝图函数来。 如…

青龙面板 香蕉

香蕉角本教程 介绍 香蕉视频 app —【多用户版】 一个账户每天稳定1元,可以自己提现,也可以兑换会员,脚本不停会员也不停!可注册多个账户!(多账户福利自行看文章底部!) 拉取文件 …

【微服务】springboot 整合javassist详解

一、前言 Javassist 是一个开源,用于分析、编辑和创建Java字节码的类库,由东京工业大学数学和计算机科学系的 Shigeru Chiba (千叶滋)所创建。目前已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操…

linux redhat 8 创建逻辑卷

LVM与直接使用物理存储相比,有以下优点: 1. 灵活的容量. 当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷. 2. 方便的设备命名 逻辑卷可以按你觉得方便的方式来起任何名称. 3.磁盘条块化. 你可以生成一个逻辑盘,它的数据可以被…

记录一次Mac本地启动nacos遇到的问题

nacos 官网:https://nacos.io/zh-cn/docs/quick-start.html 我这里下载的是2.0.3稳定的版本 本地启动:sh startup.sh -m standalone 问题1:Caused by: java.lang.IllegalStateException: No DataSource set 这里是数据源连接有问题&#xff…

Linux网络原理及编程(6)——第十六节 TCP可靠性保证的原理

目录 1、确认应答机制 2、超时重传机制 3、滑动窗口 4、流量控制 5、拥塞控制 6、延迟应答 (各位好,博主新建了个公众号《自学编程村》,拉到底部即可看到,有情趣可以关注看看哈哈,关注后还可以加博主wx呦~~~&am…

Apache Flink 水印的工作机制详解与源码阅读

一、时间长河谁能解 在人类生存的地球上,存在着一种很神秘的东西:时间,它看不见摸不着,但速度恒定,单调递增且永无止境的往前推进,人类的历史被淹没在茫茫的时间长河中。同时在地球附近,一个星…

【自动化测试】如何平衡手工和自动化测试

作为一名测试人员,如何平衡手工和自动化测试,是一道绕不过去的课题。不可否认,自动化测试具有提高效率,加快回归速度并因此有助于及时交付项目的好处。但是,在考虑自动化之前,我们应该评估一些要点&#xf…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java毕业生就业管理系统243xa

首先选择计算机题目的时候先看定什么主题,一般的话都选择当年最热门的话题进行组题,就比如说,今年的热门话题有奥运会,全运会,残运会,或者疫情相关的,这些都是热门话题,所以你就可以…

vscode 关闭/忽略/ignore 单个/指定 git 仓库/repository 提示

文章目录1. 问题2. 解决方法2.1 只追踪 打开文件 所在的仓库2.2 忽略指定的仓库3. 参考1. 问题 vscode 当打开的项目中有多个 git 仓库时,默认会显示所有仓库的 status。 有些已经不再使用的仓库可能有多处更改,但我们并不想去处理它。 如果直接关闭 vs…

gcc 4.8.5 的string问题

gcc 4.8.5及一下版本 的string 因为内部内存管理采用了COW的方式,导致了string在多线程的状态下容易崩溃。崩的很没有规律,表现就是string在赋值的时候就莫名其妙的崩了,查看堆栈,你也看不出啥。崩溃的很随机。 为了避免崩溃&…

文本纠错--文本分割N-gram--Macbert模型的调用以及对返回结果的处理

文本根据词典进行纠错 输入一段可能带有错误信息的文字, 通过词典来检测其中可能错误的词。 例如:有句子如下:中央人民政府驻澳门特别行政区联络办公室1日在机关大楼设灵堂    有词典如下:中国人民,中央人民&#x…

漏斗分析 - AARRR模型案例分析

漏斗分析是一套流程式的数据分析方法,能够科学地反映各阶段用户转化情况。漏斗分析模型已经广泛应用于用户行为分析类产品,且功能十分强大:它可以评估总体或各个环节的转化情况、促销活动效果;也可以与其他数据分析模型结合进行深…

【三维目标检测】SSN(二)

SSN数据和源码配置调试过程请参考上一篇博文:【三维目标检测】SSN(一)_Coding的叶子的博客-CSDN博客。本文主要详细介绍SSN网络结构及其运行中间状态。 1 模型总体过程 SSN主要结构如下图所示,其核心在于提出了shape-aware heads…

认识分布式锁、使用分布式锁 Redission、实现秒杀案例

分布式锁 基本原理 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行&…

[附源码]计算机毕业设计基于Vue的社区拼购商城Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

node.js-fs模块学习

目录 1.使用fs.readFile方法读取文件 2.使用fs.writeFile方法写入文件 3.fs小案例-整理成绩并写入到新文件中 4.fs模块-路径动态拼接的问题 1.使用fs.readFile方法读取文件 //导入fs模块 const fs require(fs)//调用fs读取文件 //参数1:读取文件的存放路径 //…

spring——Spring Bean属性注入——短命名空间注入——p 命名空间注入(setter注入)...

短命名空间注入 我们在通过构造函数或 setter 方法进行属性注入时&#xff0c;通常是在 <bean> 元素中嵌套 <property> 和 <constructor-arg> 元素来实现的。这种方式虽然结构清晰&#xff0c;但书写较繁琐。Spring 框架提供了 2 种短命名空间&#xff0c;可…

java基于Springboot的论坛管理系统-计算机毕业设计

项目介绍 在社会快速发展的影响下&#xff0c;论坛管理系统继续发展&#xff0c;使论坛管理系统的管理和运营比过去十年更加信息化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上论坛管理系统是一项十分重要并且有价值的事情。对于传统的论坛管理系统控制模型来…

【大数据入门核心技术-Azkaban】(一)Azkaban介绍

目录 一、Azkaban 是什么 二、Azkaban 特点 三、Azkaban 与 Oozie 对比 一、Azkaban 是什么 Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器&#xff0c;Azkaban 使用 job 文件建立任务之间的依赖关系&#xff0c;并提供 Web 界面供用户管理和调度工作流 官方网…