每天一个面试题之==和equals的区别是什么?

news/2024/11/7 22:47:21/

==和equals的区别是什么?

"=="是一个关系运算符,关系运算符可以用来进行数据和数据之间的比较,而在java中数据类型大致可以分为两大类分别是基本数据类型引用数据类型

基本数据类型包含
byte,int,float,double,char,boolean,long,short八种类型。

引用类型包含类,数组,接口三种类型。

对于基本类型来说,"=="比较的是其值的是否相同。对于引用类型来说,"=="比较的是其地址的是否相同。

原因是:基本数据类型是值传递,引用数据类型是引用传递

基本数据类型:变量名指向具体的数值.

而引用数据类型:变量名指向存储数据对象的内存地址,即变量名指向hash值.

基本数据类型:变量在声明之后,java就会立刻分配给他内存空间.

引用数据类型:它以类似C指针的方式指向对象具体的值,这类变量声明时不会分配内存,只是存储了一个内存地址。

"equals"是Object为我们提供的一个用来判断其他对象与该对象是否相等的方法,在Java中,方法的调用需要通过类或者对象来完成,或者我们也可以通过查看它的源码[如下所示]可知,它比较的是两个对象是否指向同一个引用,因此equals并不能用来进行基本类型的比较

equals源码:

在这里插入图片描述

虽然equals可以用来进行引用数据类型的比较,但是我们需要对其进行重写,原因如下所示:

student1和student2的内容是一致的,但由于我们没有重写equals方法,
因此它依然是通过比较其引用地址,所以比较结果为false,但在这里我们显然想让他比较的是二者的内容:

在这里插入图片描述

所以我们重写其equals方法:

@Overridepublic boolean equals(Object o) {// 若是同一个地址,则一定相等,提高效率if (this == o) return true;//equals方法是建立在非空对象的//getClass() 获取当前的类信息if (o == null || getClass() != o.getClass()) return false;// 若不是同一地址---对内容进行比较,若内容一致,则也认为相等Student student = (Student) o;//由于传递进来的o是object类型,所以需要下转型return  id == student.id && Objects.equals(name,student. name);

此时的返回结果才是我们理想的:

在这里插入图片描述

因此如果我们没有对equals方法进行重写那么它的作用相当于"=="对引用类型的比较,比较的是地址,而如果想让其实现对对象内容的比较,那么需要自定义其比较规则

自动重写equals和hashcode的方法:

equals的重写一定需要我们手动编写吗?

当然不是,IDE为我们实现了快速重写equals和hashcode的方法,如下所示:

右击:

在这里插入图片描述

点它:

在这里插入图片描述

勾选accept后,一直点击next即可!

在这里插入图片描述


http://www.ppmy.cn/news/87599.html

相关文章

【C++】布隆过滤器

文章目录 布隆过滤器的引入布隆过滤器的概念如何选择哈希函数个数和布隆过滤器长度布隆过滤器的实现布隆过滤器的优缺点 布隆过滤器的引入 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过…

RabbitMQ 小白教程,从安装到使用

主要内容 AMQP简介 RabbitMQ简介 RabbitMQ原理 Erlang安装 安装RabbitMQ RabbitMQ账户管理 交换器 学习目标 知识点要求AMQP简介掌握RabbmitMQ简介掌握RabbitMQ原理掌握Erlang安装掌握安装RabbitMQ掌握RabbitMQ账户管理掌握交换器掌握 一、 AMQP简介 1 AMQP是什么?…

[算法前沿]--018-中文大模型ChatGLM微调:P-Tuning,deepspeed,LoRA<下>

文章目录 1.模型部署使用自己的数据集对话数据集1.模型部署 首先载入Tokenizer: from transformers import AutoConfig, AutoModel, AutoTokenizer# 载入Tokenizer tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)如果需…

【深度剖析】JavaScript中块级作用域与函数作用域

前言 系列首发于公众号『前端进阶圈』,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。 面试官必问系列:深入理解JavaScript块和函数作用域 在 JavaScript 中,究竟是什么会生成一个新的作用域&#…

C语言基础知识:宏定义

目录 一.预处理 二.宏定义用法 ①宏常量 ②宏语句 ③宏函数 ④其它 1.#undef 是用来撤销宏定义的,用法如下: 2.使用ifndef防止头文件被重复包含和编译 三.宏定义相关作用符 ①换行符 "\" ②字符串化符 "#" ③片段连接符&…

计算机毕业论文选题推荐|软件工程|系列九

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)学生在校信息管…

我们拆了一款Tof+AI避障的扫地机,小米铁蛋铁大机器人同款

追觅W10 Pro是2022年初推出的新品,相较前一代W10,两者间最大的区别是将LDS避障升级为了TofAI避障,扫地机本体前脸像给W10开了“大眼特效”的传感器和摄像头就是机械避障升级的最佳佐证。 在外观上扫地机还是延续了以往的设计,顶部…

rsync 远程同步+inotify实时同步部署

目录 一、rsync概述1.1 rsync服务器1.2 同步方式1.2-1 全量备份1.2-2 增量备份1.2-3 rsync同步源服务器1.2-4 scp与rsync的区别 二、配置rsync源2.1 基本思路2.2 配置文件rsyncd.conf2.3 独立的账号文件2.4 启用rsync服务2.5 rsync功能及特点2.5-1 rsync功能2.5-2 rsync特点 2.…