toString()、equals()是什么,为啥需要重写,多种方法来重写

https://m.runoob.com/java/java-object-class.html

toString()

1.为什么会有toString

子类继承父类就可以使用父类所有非私有的属性的方法。
在Java中所有类都直接或者间接继承Object类,可以说只要是Object类里面定义的非私有的属性和方法,任何类都可以使用如toString(),equals(),hashCode(),notify()等等这些方法都是Object类已经定义好的的方法。

2.什么是toString

toString()就是把非字符串的数据类型转化为字符串。
Object类中的toString方法源码:


//(1)getClass().getName() 返回类的全类名(包名+类名)
//(2)Integer.toHexString(hashCode())将对象的hashCode值转成16进制字符串
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

输出的结果是:包名.类名+@+16进制的哈希值

  • getClass().getName() 意思就是这个类的全路径类名,包含了包名和类名信息,
  • hashCode是将对象的地址转换成一个整数
  • **Integer.toHexString(hashCode())**就是将hashCode值转化为16进制

最后中间拼接一个@连起来就有了上面例子的com.xhy.show.Show@15db9742。
toString()方法会返回一个字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法

3.重写toString

由于 Object 类中的 toString() 方法并不好用,因此很多其他类中都重写了此方法。(子类对父类提供的方法不满意,所以重写以符合自己的需求)

在idea中,直接 Alt+Insert 选择toString()就能自动生成重写的roString()方法。

//重写toString方法,输出对象的属性
    @Override
    public String toString() {   //重写后,默认一般是把对象的属性值输出
        return "Monster{" +
                "name='" + name + '\'' +
                ", job='" + job + '\'' +
                ", sal=" + sal +
                '}';

equals()

1.方法目的、源码

equals()也是Object中的方法,在object中equals是用来看看两个参数是否引用的是同一个对象

Object类中的equals()方法源码:

public boolean equals(Object obj) {
	return (this == obj);
}

2.重写equals()

但实际开发中经常比较的是两个对象的内容是否相等,因此需重写equals,注意只能是一个类里比。

(1)在idea中,直接 Alt+Insert 选择tequals()就能自动生成重写的equals()方法。

public boolean equals(Object obj){
        //判断地址是否相同
        //判断测试的是否是同一个对象
        //如果是同一个对象,毋庸置疑,它应该返回True
        if(this==obj){
            return true;
        }
        //非空性
        if(obj == null){
            return false;
        }
        //判断是否是一个类
        if(obj instanceof Person){
            //向下转型
            //将参数传入的对象造型为Citizen类型
            //object类是所有类的父类不向下转换,父类就比较不了子类的属性
            Person p=(Person) obj;
            if(this.name.equals(p.name)&&this.age==p.age){
                return true;
            }
 
        }
        return false;
    }

(2)自己手动定义编写
如只需role相同,或都为空不为空时的判断:
在这里插入图片描述
在这里插入图片描述

(3) 使用类里已经重写过的toString()方法的输出来比较:

@Override
public boolean equals(Object obj){
	if(obj instanceof StudentBean){
		return this.toString().equals(((StudentBean)obj).toString());
	}
	return false;

*String类中equals与==的区别

ps: String类中的 == 比较引用地址是否相同,equals() 比较字符串的内容是否相同。
在这里插入图片描述

equals与==的区别

“==”用来比较基本数据类型(int ,double…)时候是直接比较数值,比较引用数据类型(class,接口…)的时候比较的是对象的引用和地址。

equals没有重写之前比较的是两个实例引用的是不是同一个对象,但是重写之后比较的两个对象的内容是不是相同

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

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

相关文章

Linux上如何使用Stable Diffusion WebUI

在我把所有的坑都踩了一遍之后,决定记录一下linux上的Stable Diffusion webui是怎么搞的。 前提条件 已安装CUDA 已安装git 已安装Anaconda 直接安装Anaconda不要指望Linux自带的Python。虽然Linux自带的Python,但是缺胳膊少腿,所以还是直接…

IntelliJ IDEA创建Servlet

目录 ——————————————————————————————— 一、创建Java项目 1、创建java项目 2、选择java 3、next 4、给项目命名 5、新创建完java项目的目录结构 二、变java为servlet项目 1、变servlet项目 2、选择Web Application 3、更新完成后的目录…

尚融宝04-mybatis-plus插件和条件构造器

目录 一、分页插件 1、添加配置类 2、添加分页插件 3、测试分页 二、XML自定义分页 1、UserMapper中定义接口方法 2、定义XML 3、测试 三、乐观锁 1、场景 2、乐观锁方案 3、乐观锁实现流程 4、优化流程 四、wapper介绍 1、Wrapper家族 2、创建测试类 五、Qu…

Linux驱动开发

一、驱动分类Linux中包含三大类驱动:字符设备驱动、块设备驱动和网络设备驱动。其中字符设备驱动是最大的一类驱动,因为字符设备最多,从led到I2C、SPI、音频等都属于字符设备驱动。块设备驱动和网络设备驱动都要比字符设备驱动复杂。因为其比…

线程的状态

目录 1.线程状态的种类 2.线程的状态图 3.状态的详细说明 1.线程状态的种类 初始(NEW):新建一个线程,但还没有调用start方法 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态统称为"运行".线程对象创建后,其他线程调用了该对象的start()方法.该…

抽丝剥茧还原真相,记一次神奇的崩溃

作者:靳倡荣 本文详细回放了一个崩溃案例的分析过程。回顾了C多态和类内存布局、pc指针与芯片异常处理、内存屏障的相关知识。 一、不讲“武德”的崩溃 1.1 查看崩溃调用栈 客户反馈了一个崩溃问题,并提供了core dump文件,查看崩溃调用栈如下…

大数据-重新学习hadoop篇(第一天)-未完成

前言:首先这次重新学习为了后面校招,我会把我每天复习学到的一些觉得重要的知识点进行总结下来,持续更新,为实习做准备,加深记忆,从今天开始可能就不会法leetcode的相关题解了,但是每天还是会做…

【动态规划】不同路径,编辑距离题解及代码实现

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

【前端】深入浅出缓存原理

缓存的基本原理 对于前端来说,缓存主要分为浏览器缓存(比如 localStorage、sessionStorage、cookie等等)以及http缓存,也是本文主要讲述的。 当然叫法也不一样,比如客户端缓存大概包括浏览器缓存和http缓存 所谓htt…

“选用育留”,让AI搞定人力资源那点事

人工智能可以渗透应用到各行各业,在人力资源领域,技术已经重构了我们对人力资源的想象力,许多企业都在应用AI技术改善人力工作,人力资源的数智化不仅仅是将一部分日常事务性的工作交由AI处理,节约工作时间,…

到底什么是线程?线程与进程有哪些区别?

上一篇文章我们讲述了什么是进程,进程的基本调度 http://t.csdn.cn/ybiwThttp://t.csdn.cn/ybiwT 那么本篇文章我们将了解一下什么是线程?线程与进程有哪些区别?线程应该怎么去编程? 目录 http://t.csdn.cn/ybiwThttp://t.csdn…

HTTP详解

一,什么是HTTPHTTP(全称为“超文本传输协议”),是一种应用非常广泛的应用层协议,之前在《初识网络原理》的博客(初识网络原理_徐憨憨!的博客-CSDN博客)中,有详细讲解过TCP/IP五层模型,其中应用层描述了数据…

算法---完成任务的最少工作时间段

题目: 你被安排了 n 个任务。任务需要花费的时间用长度为 n 的整数数组 tasks 表示,第 i 个任务需要花费 tasks[i] 小时完成。一个 工作时间段 中,你可以 至多 连续工作 sessionTime 个小时,然后休息一会儿。 你需要按照如下条件…

即时通讯系列-N-客户端如何在推拉结合的模式下保证消息的可靠性展示

结论先行 原则: server拉取的消息一定是连续的原则: 端侧记录的消息的连续段有两个作用: 1. 记录消息的连续性, 即起始中间没有断层, 2. 消息连续, 同时意味着消息是最新的,消息不是过期的。同…

CKA最新考试费用是多少?考试内容是什么?

CKA认证考试是由Linux基金会和云原生计算基金会(CNCF)创建的,以促进Kubernetes生态系统的持续发展。该考试是一种远程在线、有监考、基于实操的认证考试,需要在运行Kubernetes的命令行中解决多个任务。CKA认证考试是专为Kubernetes管理员、云管理员和其他…

YOLOv8初体验:检测、跟踪、模型部署

安装 YOLOv8有两种安装方式,一种是直接用pip命令安装: pip install ultralytics另外一种是通过源码安装: git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e .[dev]安装完成后就可以通过yolo命令在命令…

Yolov8详解与实战

文章目录摘要模型详解C2F模块Losshead部分模型实战训练COCO数据集下载数据集COCO转yolo格式数据集(适用V4,V5,V6,V7,V8)配置yolov8环境训练测试训练自定义数据集Labelme数据集摘要 YOLOv8 是 ultralytics …

Git规范

Commit 规范 常见的开源社区 commit message 规范: 比如 Angular 规范: 语义化:commit message 被归为有意义的类型用来说明本次 commit 的类型。 规范化:commit message 遵循预先定义好的规范,比如格式固定、都属…

GIS(地理信息系统/地理信息科学)职称评审三:中科院和人社部职称评审结果公示对比

目录1.前言2.中科院3.人社部3.1 初级、中级3.2 高级、正高级3.3 公示时间4. 证书5. 程序员要不要评职称?6.总结1.前言 我们在前两篇已经讲过了GIS(地理信息系统/地理信息科学)怎么评职称?以及中科院和人社部职称评审所需材料内容对…

Qss样式表语法

QSS样式表语法 更多精彩内容👉个人内容分类汇总 👈👉QSS样式学习 👈文章目录QSS样式表语法[toc]概述一、样式规则二、选择器类型三、子控件四、伪状态五、样式表冲突解决六、级联七、继承八、命名空间中的控件概述 Qt样式表的概念…