当前位置: 首页 > news >正文

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方法,输出对象的属性@Overridepublic 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){//判断地址是否相同//判断测试的是否是同一个对象//如果是同一个对象,毋庸置疑,它应该返回Trueif(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没有重写之前比较的是两个实例引用的是不是同一个对象,但是重写之后比较的两个对象的内容是不是相同

http://www.lryc.cn/news/39958.html

相关文章:

  • 家装材料清单中会有哪些装饰材料?
  • 【C++初阶】6. CC++内存管理
  • 【数据结构】万字超详解顺序表(比细狗还细)
  • yolov5 剪枝、蒸馏、压缩、量化
  • 如何用python代码,更改照片尺寸,以及更换照片底色
  • 【pygame游戏】Python实现蔡徐坤大战篮球游戏【附源码】
  • 通过指针引用字符串详解,以及字符指针变量和字符数组的比较
  • Vue基本整合(一)
  • C++编程之 万能引用
  • 【JavaScript速成之路】JavaScript内置对象--数组对象
  • 【华为机试真题详解 Python实现】最差产品奖【2023 Q1 | 100分】
  • [算法] 二分查找
  • HTML面经
  • 我的十年编程路 2021年篇
  • ElasticSearch 8 学习笔记总结(七)
  • 【云原生】Docker 网络模式详解、容器间网络通信
  • Java开发 - 布隆过滤器初体验
  • 【计算机组成原理 - 第一章】计算机系统概论(完结)
  • C++类与对象(下)【详析】
  • exe反编译为.py文件
  • 38 openEuler搭建FTP服务器-FTP总体介绍
  • 三天吃透操作系统面试八股文
  • vue后台管理系统——添加i18n国际化功能——技能提升
  • 理清gcc、g++、libc、glibc、libstdc++的关系
  • 一、快速入门 MongoDB 数据库
  • PMP第一章到第三章重要知识点
  • 【事务与锁】当Transactional遇上synchronized
  • Pytorch模型转TensorRT步骤
  • 产品经理入门——必备技能之【产品运营】
  • 【Java实现文件上传】java后端+vue前端实现文件上传全过程详解(附源码)