Java学习之equals方法练习

news/2024/4/29 22:33:18/文章来源:https://blog.csdn.net/wjkqq0921/article/details/128265102

目录

第一题

题目要求

我的代码

创建Person类

 main类

结果

 重写equals

重写后的结果

老师代码

思路

结果

总结

Interger类

源代码

 String类

源代码

第二题

运行结果

 第三题

知识点

 运行结果


第一题

题目要求

判断两个 Person 对象的内容是否相等, 如果两个 Person 对象的各个属性值都一样, 则返回 true, 反之 false。
 

我的代码

创建Person类

class Person {private String name;private int age;private char gender;public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}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;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}
}

 main类

package com.hspedu.object_;public class EqualsExercise01 {public static void main(String[] args) {Person person = new Person("曹操", 61, '男');Person person1 = new Person("曹操", 61, '男');System.out.println(person == person1);没有重写的时候都是比较地址,重写后才能比较内容System.out.println(person.equals(person1));}}

结果

 因为Person类中没有重写equals方法,所以比较的还是地址

 重写equals

我用的是IDEA自带的Alt+Insert自动重写equals

    @Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;if (age != person.age) return false;if (gender != person.gender) return false;return name != null ? name.equals(person.name) : person.name == null;}

重写后的结果

 

老师代码

老师是自己写的

思路

             1)先判断是否指向同一地址空间

            2)如果不是,则判断传入的person1的运行类型是不是Person类(instanceof)

            3)如果结果为true的话,则向下转型,将person1的编译类型从Object类强转成Person类(属性看编译类型),然后一一比较三个属性是否相等,返回比较的结果(短路与:只要有一个不相等就返回false)

             4)如果步骤2的判断结果为false的话,则返回false;

 @Overridepublic boolean equals(Object obj) {if(this == obj){return true;}if(obj instanceof Person){Person p1 = (Person) obj;return name.equals(p1.name) && age == p1.age && gender == p1.gender;}return false;}

结果

总结

在java程序中如果是对象调用equals方法,程序不会自动重写equals方法,所以比较的还是地址而不是具体的内容,如果是String类或者Interger类等子类调用equals方法方法,java会自动重写equals方法,比较具体内容

Interger类

        Integer n1 = 10;Integer n2 = 15;System.out.println("=======自动重写========");System.out.println(n1.equals(n2));

源代码

public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}

 String类

        String s1 = "你好";String s2 = "你好";System.out.println(s1.equals(s2));

源代码

    public boolean equals(Object anObject) {if (this == anObject) {return true;}return (anObject instanceof String aString)&& (!COMPACT_STRINGS || this.coder == aString.coder)&& StringLatin1.equals(value, aString.value);}

第二题

考察点:equals方法的作用,以及子类重写equals方法之后的作用

package com.hspedu.object_;public class EqualsExercise02 {public static void main(String[] args) {Person01 p1 = new Person01();p1.name = "hspedu";Person01 p2 = new Person01();p2.name = "hspedu";System.out.println(p1==p2);//比较地址,结果为false//字符串调用equals,自动重写equals,比较内容,结果为trueSystem.out.println(p1.name.equals(p2.name));//没有手动重写,结果为falseSystem.out.println(p1.equals(p2));String s1 = new String("asdf");String s2 = new String("asdf");//String,结果为trueSystem.out.println(s1.equals(s2));//引用数据类型,比较地址,结果为falseSystem.out.println(s1==s2);}
}class Person01 {//类public String name;
}

运行结果

 第三题

package com.hspedu.object_;public class EqualsExercise03 {public static void main(String[] args) {int it = 65;float f1 = 65.0f;System.out.println("65和65.0f是否相等? " + (it == f1));char ch1 = 'A' ;char ch2 = 12;System.out.println("65和'A'是否相等?"+ (it == ch1));System.out.println("12和ch2是否相等?"+ (12 == ch2));String str1 = new String("hello");String str2 = new String("hello");System.out.println("str1和str2是否相等?"+ (str1 == str2));System.out.println("str1是否equals str2?" +(str1.equals(str2)));System.out.println( "hello” == new java.sql.Date()));}
}

知识点

byte、short、char运算的时候自动转换成int型,'A'对应的十进制数字是65

 运行结果

 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

m基于PSO粒子群算法的重采样算法仿真,对比随机重采样,多项式重采样,分层重采样,系统重采样,残差重采样,MSV重采样

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 重采样的主要方法有随机重采样,多项式重采样,分层重采样,系统重采样,残差重采样,MSV重采样等。 a.随机采样是一种利用分层统计思想设计出来的,将空间均匀划分,粒子打点后…

青龙面板 香蕉

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

PLC-Recorder实现速度高达0.24ms准确周期采集的方法(带时间戳采集)

目录 1、PLC的发送程序 2、PLC连接配置 3、PLC-Recorder侧的通讯设置 4、PLC-Recorder的通道配置 5、PLC-Recorder的变量配置 6、正常通讯情况的界面 7、记录数据的情况 8、小结 如果要以非常高的速度高速采集各种控制器(典型的是PLC)的数据&…

攻击类型的攻击次数分布

攻击类型分析 2018 年,主要的攻击类型 1 为 SYN Flood,UDP Flood,ACK Flood,HTTP Flood,HTTPS Flood, 这五大类攻击占了总攻击次数的 96%,反射类攻击不足 3%。和 2017 年相比&…

windows下node.js通过N-API调用c++函数

环境准备 vscode安装(以下均在vscode中操作)node.js安装,版本不要太老c工具链安装,安装Visual Studio2019社区版即可,或者执行 npm install --global windows-build-tools(这个我没试过,window…

无需代理及注册在VsCode中使用ChatGPT

无需代理及注册在VsCode中使用ChatGPT 安装 要安装扩展,请按照下列步骤操作: 1.打开 Visual Studio Code 2.单击左侧栏中的扩展程序图标 3.搜索"ChatGPT中文版" 4.点击安装按钮安装扩展 5.重启VSCode 用法 开始使用 在编辑器中右键触发…

mac m1 安装docker docker 安装php 5.6 和 7.2 避坑指南

注意:这个docker一旦下载用起来,没事不要升级,容易导致APP挂载目录找不到,重装非常浪费时间 通过该link可以下载兼容mac m1核心的docker-desktop: Docker Desktop - Docker 所有基于amd64架构核心的都加上--platform linux/amd6…

IEEE 二进制浮点数的表示

今天,我来将 IEEE 二进制浮点数的表示方式进行一个简单的介绍。 浮点数 在 C 语言中,有两种存储浮点数的方式,分别是 float 和 double ,当然了还有long double。这几种浮点型所容纳的长度不同,当然它们存储的精度也就…

springBoot中日志的使用

springBoot中日志的使用 日志基础 首先你需要知道日志门面,日志实现,日志桥接器。 基于日志实现,常用的有logback,log4j2,这两个日志实现是的创始人是同一个,概念差不多,这里以log4j2为例,有如…

经矩形窗截断的信号频谱泄露现象研究-附Matlab代码

⭕⭕ 目 录 ⭕⭕✳️ 一、频谱泄露现象✳️ 二、原因分析以及解决方法✳️ 三、Matlab程序获取与验证✳️ 一、频谱泄露现象 有一个余弦信号,信号频率30Hz,信号为x(t)cos(2π30t),采样频率fs128Hz,样本长度分别取N128和N100&…

Android 使用 jni Demo示例

Android 使用 jni Demo示例简介1. NDK的介绍1.1 NDK 简介1.2 NDK 特点2. JNI介绍2.1 JNI 简介2.2 为什么要有 JNI?3. NDK 与 JNI 的关系NDK下载及环境配置1. 使用Android studio SDK Manager下载2.配置NDK2.1 配置环境变量2.2 Android studio配置NDK示例Demo流程1.版…

【云原生】devops之jenkins中pipeline语法(2)

前言: pipeline语法分类一般来说,有四种。分别是环境配置、阶段步骤、行为动作、逻辑判断。 二、阶段步骤 (1)post 根据pipeline块或者stage块(阶段)完成的状态来进行一个或者多个附加步骤(取决…

Gaussian 计算静电云图确定吸附位点

计算背景: 利用高分子有机物等活性材料对有毒分子、原子、离子在真空、水溶液、有机溶液等环境下吸附,已是当今环境科学、矿物学、土壤化学等学科领域研究的热点。但如何确定最佳吸附位点以计算其吸附能就显得尤为重要。 现阶段多数物质的吸附均依据粒…

【通信基础】TTL、RS232、RS485

TTL1、TTL简介RS2321、RS232基本概念2、DB9串口定义及接线参考3、RS232经典电路4、特点RS4851、RS485简介2、特点3、传输距离4、经典电路5、传输差分电平信号TTL 1、TTL简介 TTL的英文全称是Transisor-Transisor Logic. 翻译过来就是晶体管与晶体管之间的逻辑电路。 TTL电平信…

Java搭建宝塔部署实战毕设项目springboot销售培训考评系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目springboot销售培训考评系统源码。 技术架构 技术框架:jQuery MySQL5.7 mybatis shiro Layui HTML CSS JS jpa运行环境:jdk8 IntelliJ…

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

1、迭代 通过重复执行的代码处理相似的数据集的过程&#xff0c;并且本次迭代的处理数据要依赖上一次的结果继续往下做&#xff0c;上一次产生的结果为下一次产生结果的初始状态&#xff0c;如果中途有任何停顿&#xff0c;都不能算是迭代。 # 非迭代例子 n 0 while n < …

java之注解的定义和使用

初识注解&#xff1a; 注解的概念&#xff1a; 注解是从JDK5.0开始引入的新技术&#xff0c;它不是程序本身&#xff0c;但是和注释有相同的作用&#xff0c;都能够对程序做出一定的解释&#xff0c;并且注解能够被其他编译器所读取 注解的格式&#xff1a; 注解是以“注释…

平均月薪15k+?自动化测试工程师?3个月教你从“点工”蜕变为“码农”

前言 一、自动化测试工程师平均收入【看图&#xff08;来自职友集&#xff09;】 基本收入都在15k左右&#xff0c;随着技术的越来越牛逼工资也就会越来越高。 我的职业生涯开始和大多数测试人一样&#xff0c;刚开始接触都是纯功能界面测试。那时候在一家电商公司做测试&…

[附源码]计算机毕业设计基于人脸识别的社区防疫管理系统Springboot程序

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

SSRF漏洞详解与利用

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是SSRF漏洞详解与利用。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…