Java学习之equals方法练习

news2024/11/15 20:04:50

目录

第一题

题目要求

我的代码

创建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

    @Override
    public 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;

 @Override
    public 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,比较内容,结果为true
        System.out.println(p1.name.equals(p2.name));
        //没有手动重写,结果为false
        System.out.println(p1.equals(p2));
        String s1 = new String("asdf");
        String s2 = new String("asdf");
        //String,结果为true
        System.out.println(s1.equals(s2));
        //引用数据类型,比较地址,结果为false
        System.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.coloradmin.cn/o/78766.html

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

相关文章

SQL开窗函数之基本用法和聚合函数

开窗函数 当我们需要进行一些比较复杂的子查询时,聚合函数就会非常的麻烦,因此可以使用开窗函数进行分组再运用函数查询。窗口函数既可以显示聚集前的数据,也可以显示聚集后的数据,可以在同一行中返回基础行的列值和聚合后的结果…

python之模块使用

目录 一、模块 二、标准模块 collections模块 三、异常处理 四、文件操作 一、模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 新建util…

day17【代码随想录】找出字符串中第一个匹配项的下标 、重复的子字符串

文章目录前言一、找出字符串中第一个匹配项的下标(力扣28)二、重复的子字符串(力扣459)前言 1、找出字符串中第一个匹配项的下标 2、重复的子字符串 一、找出字符串中第一个匹配项的下标(力扣28) 给你两个…

LeetCode HOT 100 —— 200 .岛屿问题

题目 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该…

有意思,圣诞节自己做一个装饰圣诞帽头像的APP!

话说又到了一年一度到别人到节日,圣诞节,还记得去年的时候,朋友圈疯狂转发到圣诞帽嘛,在圣诞节为自己到头像增加一款圣诞帽还是蛮应景的。 我们的目标就是是这样的 ❝ 当然,如果你对过程不感兴趣,那么直接到…

总结本人学习b站黑马前端课程,各部分案例汇总

目录 1.Ajax: 对应课程: b站黑马JavaScript的Ajax案例代码——新闻列表案例 b站黑马JavaScript的Ajax案例代码——评论列表案例 b站黑马JavaScript的Ajax案例代码——聊天机器人案例 b站黑马JavaScript的Ajax案例代码——图书管理案例 2.ES6面向对…

HTML-如何让网站变成灰色?

在某些特定的时候,我们经常会看到网站会将整体布局设置成灰色色调,以示哀悼。 那么这是怎么实现的呢? 我去查了下相关的文章,发现是通过CSS的 过滤器函数 实现的,详见:grayscale()。 grayscale:对图片进…

MySql性能优化(三)执行计划详解

执行计划 执行计划执行计划概述idselect_typetabletypepossible_keyskeykey_lenrefrowsextra官网地址 在具体的应用当中,我们排查sql有没有走索引,性能如何,需要查看Sql语句具体的执行过程,以方便我们调整sql来加快sql的执行效率。…

如何通过 IntelliJ IDEA 来提升 Java8 Stream 的编码效率

小新再次推荐一篇 ,主要是讲如何通过 IntelliJ IDEA 来提升 Stream 的编码效率,算是一个小技巧,经常使用 Java8 Stream 流的小伙伴们,可以试下,能够提升工作效率哦! 一、Java8 Stream API 的不友好性 Java…

02优先队列和索引优先队列-优先队列-数据结构和算法(Java)

文章目录1 概述1.1 需求1.2 优先队列特点1.3 优先队列分类1.4 应用场景1.5 相关延伸2 说明3 索引优先队列3.1 实现思路3.2 API设计3.2 代码实现及简单测试5 主要方法讲解5.1 exch()5.2 insert()5.2 poll()6 分析7 后记1 概述 普通的队列是一种先进先出的数据结构,元…

JMeter连接Oracle过程及常见问题总结

如果被测试系统使用的数据库不是MySQL而是Oracle,如何用JMeter进行连接呢? 一、下载数据库驱动 需要确认数据库的版本,可以上网站下载驱动:https://www.oracle.com/database/technologies/jdbc-ucp-122-downloads.html。 或者直…

【Linux】进程间通信-共享内存

前言 我们知道,在Linux中,进程是相互独立存在的,不存在直接让进程之间互相通信的方式。但是如果我们能让不同进程之间见到同一块内存,也就是都能读写这片区域是不是就能够达到进程间通信呢? 事实证明确实如此。在之前我…

【springboot进阶】基于starter项目构建(二)构建starter项目-fastjson

目录 一、创建 fastjson-spring-boot-starter 项目 二、添加 pom 文件依赖 三、构建配置 四、加载自动化配置 五、打包 六、使用 这个系列讲解项目的构建方式,主要使用 父项目 parent 和 自定义 starter 结合。项目使用最新的 springboot3 和 jdk19。本系列的…

kinect v2安装iai_kinect2

目前已完成 前期已经安装了libfreenect2 使用的系统为ubuntu 18.04 使用的相机为kinect v2 已经安装好了orb_slam3,已经完成使用stereo在euroc数据集和使用RGB-D在tum数据集上的测试 目的 想要完成使用深度相机进行在线测试 步骤 step1 经过查阅资料发现目前仅…

大学生HTML期末作业, JavaScript期末大作业

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Java项目:SSM设备台账管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能: 管理员登录,物理设备管理,IP地址资源管理,虚拟机管理,通知公告管理,学历管理,部门管理,员工管理等功能。 …

DFS 数据结构 C++语言实现 图的深度优先遍历

1.DFS图解 图的深度优先遍历 1.1 基本定义: 设初始时,图中所有顶点未曾被访问过: ● 从图中某个顶点 v 出发,访问此顶点; ● 依次从 v 的未被访问的邻接点出发深度优先遍历图,直至图中所有和顶点 v 有路…

【非下载vs解决】error: Microsoft Visual C++ 14.0 or greater is required

首先说解决办法 搜索下载对应库的whl文件即可 下面是解决过程 部分报错为:error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/ 我是安装wordcloud库…

Activemq安装和控制台

目录 一、安装 二、后台服务启动 三、查看前台 一、安装 http://blog.csdn.net/gebitan505/article/details/55096222 二、后台服务启动 普通启动/关闭 到activemq的目录下执行【./activemq start/stop】进行开启和关闭activemq 带日志的启动 控制台不输出东西&#x…

Stm32旧版库函数2——mpu6050 移植成旧版兼容型库函数DMP

main.c: /******************************************************************************* // 陀螺仪 MPU6050 IIC测试程序 // 使用单片机STM32F103C8T6 // 晶振:8.00M // 编译环境 Keil uVision4 // 在3.3V的供电环境下,就能运行 // 波特率 9600 /…