Java 学习和实践笔记(28):equals方法的使用

equals() 是Object类里的一个方法。而Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法。一切类,如果在类的声明中未使用extends,则默认继承Object类。如果声明了,那么Object类就变成该类的父类的父类的...类,该类也一样可以使用equals()方法。

equals用来比较两个对象是否相同。默认情况下(也就是在Object类里的原始定义的方法),如果对象是基本类型,那么比较的是两个对象的值是否相等。如果对象是引用类型(所谓引用类型,就是自己定义的那些类),那么就是比较两个对象的地址是否相同。

如果在实践中,我们比较两个对象时,认为某一个属性相同时,就认为这两个对象相同,那么这个时候就不能直接使用默认情况下,需要重写equals()这个方法。否则没法实现这个属性相同,就认为两个对象相同的功能!因为不同的对象,总是有不同的地址,按原来的比较方法,是不可能认为两个对象相同的。

示例如下:

public class TestObject {int id;String name;String pwd;public TestObject(int id, String name, String pwd) {//自定义的构造器this.id = id;this.name = name;this.pwd = pwd;}TestObject(){};//写了自定义构造器如仍要默认的构造器,就需要写出来。public static void main(String[] args) {
/*        TestObject t1 = new TestObject();System.out.println(t1.toString());//使用toString()方法得到t1的地址TestObject t2 = new TestObject();System.out.println(t2.toString());System.out.println(t2);//如果不写toString,默认也是调用toString()*/TestObject t3 = new TestObject(1001,"张三","123456");TestObject t4 = new TestObject(1001,"李四","654321");System.out.println(t3.toString());System.out.println(t4.toString());System.out.println(t3.equals(t4));//判断t3是否与t4相同}
}

可以看到,上面是比较了两个对象的地址,所以肯定是不同,返回false.

如果想只比较id,则需要重写equals方法,用下面的方法自动生成:

示例:

import java.util.Objects;public class TestObject {int id;String name;String pwd;public TestObject(int id, String name, String pwd) {//自定义的构造器this.id = id;this.name = name;this.pwd = pwd;}TestObject(){};//写了自定义构造器如仍要默认的构造器,就需要写出来。@Overridepublic boolean equals(Object o) { //重写equals方法,仅比较idif (this == o) return true;if (o == null || getClass() != o.getClass()) return false;TestObject that = (TestObject) o;return id == that.id;}@Overridepublic int hashCode() {return Objects.hash(id);}public static void main(String[] args) {
/*        TestObject t1 = new TestObject();System.out.println(t1.toString());//使用toString()方法得到t1的地址TestObject t2 = new TestObject();System.out.println(t2.toString());System.out.println(t2);//如果不写toString,默认也是调用toString()*/TestObject t3 = new TestObject(1001,"张三","123456");TestObject t4 = new TestObject(1001,"李四","654321");System.out.println(t3.toString());System.out.println(t4.toString());System.out.println(t3.equals(t4));//判断t3是否与t4相同}
}

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

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

相关文章

python+django高校澡堂洗浴浴室预约签到管理系统8d8c

本系统在设计过程中,高校洗浴管理系统的出现就有很大的需求。该系统可以很好地解决这些麻烦和问题。 很好地发挥了该开发方式的优势,让实现代码有了良好的可读性,而且使代码的更新和维护更加的方便,操作简单,对以后的维…

带你详细理解数组与指针(包含二维数组)

作者博客主页:谦逊码农的旅程 1. sizeof中单独放一个数组名,此时的数组名表示整个数组。 2. &数组名,表示整个数组的地址。 3. 在 C 语言中,变量的地址通常是由一个指针来表示,而指针的大小取决于计算机架构和操…

MySQL·SQL优化

目录 一 . 前言 二 . 优化方法 1 . 索引 (1)数据构造 (2)单索引 (3)explain (4)组合索引 (5)索引总结 2 . 避免使用select * 3 . 用union all代替u…

Linux之cd、pwd、mkdir 命令

cd命令,切换目录 1)当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录。 2)我们可以通过cd命令,更改当前所在的工作目录。 3)cd命令来自英文:C…

C#使用Stack类进行堆栈设计

目录 一、涉及到的知识点 1.栈定义 2.Stack类 二、 使用Stack类进行堆栈设计 1.创建一个新的Stack实例 2.然后,可以使用Push方法将元素添加到堆栈中 3.使用Pop方法从栈顶删除一个元素 4.使用Peek方法查看堆栈顶部的元素 三、实例 一、涉及到的知识点 1.栈…

java中的死锁问题

什么是死锁? 当多个线程持有不同的资源,并且互相等待对方释放资源时,就会导致死锁的发生。在死锁情况下,各个线程都无法继续向前执行,导致程序无法继续运行。 死锁的四个条件? 互斥条件:线程…

3.6消息队列

实现消息队列实现AB进程对话。 a.A进程发送一句话后&#xff0c;B进程接收到打印。然后B进程发送一句话&#xff0c;A进程接收后打印 b.重复上述步骤。直到AB接收或者发送完quit后&#xff0c;结束AB进程 A: #include <stdio.h> #include <sys/types.h> #inclu…

使用nvidia-ml-py事实监控GPU状态

平时监控GPU状态最常用的是watch配合nvidia-smi指令&#xff0c;但有时可能不仅仅需要监控&#xff0c;还需要记录状态数据&#xff0c;比如GPU的显存变化以及利用率变化等等。本文提供了一个使用nvidia-ml-py包编写的简易Demo&#xff0c;该Demo能够实现简易版的nvidia-smi功能…

C++之获取Windows系统信息

目录 1. 操作系统版本 2. 获取CPU信息 3. 获取内存信息 4. 获取硬盘信息 5.获取网络接口信息 6.获取计算机名称、用户名 在C中&#xff0c;你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码&#xff0c;用于获取Windows系统信息…

⁴ 细说IT从业者35岁,真的是职业的转折点吗

IT从业者如何跨过35岁职业门槛是一个很重要的问题。 一 虽然年龄可能会成为一些公司在招聘过程中的考虑因素&#xff0c;但是有一些方法可以帮助你克服这个挑战并继续在IT行业中发展。 首先&#xff0c;持续学习和自我提升非常重要。随着科技的不断发展&#xff0c;IT行业也在不…

STM32使用标准库编写外部时钟控制oled显示计数(proteus仿真)

这节课的结果是在上节课的基础上更改的&#xff1a;电路图为&#xff1a;用一个开关来模拟外部时钟的高低电平的变化。 当然也可以配置一个外部时钟来模拟&#xff0c;也是可以的&#xff1a; 由于这节课的代码是在上节课的基础上有一点修改而来的&#xff0c;所以就只把更改的…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1&#xff1a;【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程&#xff01;全套200集&#xff01;学不会退出IT界&#xff01; 参考文章2&#xff1a;清华教授大力打造的Python高级核心技术&#xff01;整整100集&#xff0c;强烈建议学习&#xff08;Python3…

Linux系统运维脚本:备份mysql数据库,并删除旧的数据库备份文件(保留最新的数据库备份)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…

什么是GA版本

软件发布版本的GA版本是什么意思&#xff1f; 一般可用性 (GA) 什么是一般可用性&#xff1f; 一般可用性&#xff08;GA&#xff09;是指向公众发布产品。与主要用于测试和用户反馈的限量发行版或测试版不同&#xff0c;当产品达到一般可用性时&#xff0c;就可以通过公司的一…

代码随想录训练营第50天| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 题目链接&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {int[][] dp new int[prices.length][5];if(prices.length 1) {return 0;}dp[0][0] 0;dp[0][1…

C++_程序流程结构_跳转语句_break

break 作用 用于跳出选择结构或循环结构 break使用的时机 出现在switch条件语句中&#xff0c;作用是终止case并跳出switch出现在循环语句中&#xff0c;作用是跳出当前的循环语句出现在嵌套循环中&#xff0c;跳出最近的内层循环语句 示例1 示例2 示例3

C语言结构体的大小,结构体内存对齐

1. 结构体的大小 在自己正真了解过之前&#xff0c;一直认为结构体的大小就是结构体内部成员大小的总和。 但当你去尝试打印结构体的大小时&#xff0c;会发现事实并非如此&#xff0c;也不会像你想的那样简单。 #include <stdio.h>struct S1 {char c1;char c2;int i;…

什么原因导致了电视大国的国内市场萎缩1300台?2024最值得购买的随身WiFi

近日&#xff0c;全国人大代表&#xff0c;TCL的创始人兼董事长就提出了一个问题&#xff1a;中国生产了世界上75%的电视机&#xff0c;但是国内市场的销量&#xff0c;在5年内缩水了1300万台&#xff0c;这究竟是为什么呢&#xff1f; 对此网友们纷纷解答&#xff1a; 电视能…

基于51单片机的智能火灾报警系统

基于51单片机的智能火灾报警系统 摘要&#xff1a; 本文提出了一种基于51单片机的智能火灾报警系统。该系统采用烟雾传感器和温度传感器来检测火灾的发生&#xff0c;并通过单片机进行数据处理和报警控制。此外&#xff0c;该系统还具有无线通信功能&#xff0c;可以实时将火灾…

Android开发者值得深入思考的几个问题,看完必懂

程序员的劫 最近&#xff0c;又被程序员年龄的事情刷屏了。37岁被公司优化&#xff0c;找工作几个月都没有很好的归属&#xff0c;所谓的小公司还看不上。等等类似的话题变成了程序员的吐槽固定标题&#xff0c;无论是程序员&#xff0c;还是其他行业人员&#xff0c;都可以就…