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

news2024/11/29 20:44:54

==和equals的区别是什么?

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

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

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

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

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

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

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

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

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

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

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

equals源码:

在这里插入图片描述

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

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

在这里插入图片描述

所以我们重写其equals方法:

@Override
    public 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.coloradmin.cn/o/572316.html

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

相关文章

谢谢所有可爱的粉丝友友们

前言: 其实我很早之前就申请了CSDN账号,其中陆陆续续也在写博客,但是没有坚持下来,大家可以看到我的前期博客,少之又少,我甚至只要看一下我的博客内容,我就知道我当时在哪里,我当时在…

[RSA议题分析] eBPF Warfare - Detecting Kernel eBPF Rootkits with Tracee

文章目录 简介议题分析基础知识用户空间与内核空间hookrootkit追踪技术 eBPF架构Tracee - 一个运行时安全检查工具 RootKit种类与各个阶段的攻防LD_PRELOAD RootKitKernel Module RooKitKernel RootKit HidingKernel RootKit Hooksyscall table hookingfile operations hooking…

<数据结构>NO6.堆的实现|堆的应用

🐇本文用到的所有代码都放在我的gitee仓库了🐇syseptember的gitee仓库https://gitee.com/syseptember/data-structure/tree/4f0b1f9f56e3b0bee72fa0563c23a6917b3252e8/Heap/Heap 目录 堆的概念 堆的实现 堆的应用 堆排序 时间复杂度分析 TopK问题 …

做功能测试好几年,一直都像是给人“打杂”的!直到这天我开始……

“做功能测试这几年,一直都像是给人打杂的!”这句话,想必很多测试人员都有过同感。曾经,我们每天要重复执行繁琐的测试流程,手动输入大量数据、进行各种操作、检查每一个细节,整个过程反复无常,…

用 AI 轻松管理数据收集和分布! #TallyForms

工作中需要面对各种各样让人眼花缭乱的表格🤯 此时一款让数据收集和整理变得轻松的平台简直就是打工人们的福音,TallyForms 就拥有自定义表单、实时分析和高效管理的全方位解决方案! TallyForms TallyForms 是一个免费的在线表单生成器&am…

[论文阅读] Explicit Visual Prompting for Low-Level Structure Segmentations

[论文地址] [代码] [CVPR 23] Abstract 我们考虑了检测图像中低层次结构的通用问题,其中包括分割被操纵的部分,识别失焦像素,分离阴影区域,以及检测隐藏的物体。每个问题通常都有一个特定领域的解决方案,我们表明&am…

高压放大器在大学教研领域的实际应用

在大学教研领域中,高压放大器可以用于多种实际应用。下面将介绍其中几个典型的应用场景。 1、激光切割 适用高校学院:机械学院 应用场景:机械制造、各类材料的切割 2、超声雾化 适用高校学院:医学院、机械学院、物理学院 应用场景…

C4D R26 渲染学习笔记(1):C4D版本选择和初始UI框介绍

C4D版本知识 C4D通过R来进行版本区分,现在2023年5月22日最新版的是R26。说一下特殊版本。 C4D版本介绍特点R19OC快乐版3.07最高版本,OC是C4D最具性价比的渲染器,OC学习成本低,渲染速度快,但是注意OC 3.07只支持10系N…

MySQL8.0数据库超详细安装教程全过程

1、官网下载MySQL8.0地址:MySQL :: Download MySQL Installer (Archived Versions) 2、 双击安装包进行安装 3、自定义安装 4、选择MySQL Server8.0 5、创建MYSQL数据存储目录及安装目录 6、配置安装路径及数据存储目录 7、确认继续 8、选择MySQL,下一步…

我4年测试,已失业3个月.....

我做测试4年,一线城市薪水拿到15K,中间还修了一个专升本,这个年限不说资深肯定也是配得上经验丰富的。今年行情不好人尽皆知,但我还是对我的薪水不是很满意,于是打算出去面试,希望可以搏一个高薪。 但真到面…

分布式项目 11 在项目中使用jsonp发送请求并且处理

在项目中使用jsonp技术 01.相关子系统的搭建 第一步:创建一个新的子系统,叫做jt-sso 选中jt父级项目,然后鼠标右键进行new,然后选中maven Model,进行项目的创建,具体操 作如下图所示: 第二步…

STM32单片机(三)第一节:GPIO输出

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

5个超好用的在线抠图网站,告别繁琐的PS,快马住!

本期给大家推荐5个超好用的在线抠图网站,几秒钟就能搞定你的需求,告别繁琐的PS,重点是免费哦,赶紧收藏起来吧! 1、菜鸟图库 https://www.sucai999.com/default/crx/removebg?vNTYwNDUx 菜鸟图库是一个专门为新手设计…

Go网络通信

Go中HTTP协议客户端实现 Go语言标准库内置了net/http包,涵盖了HTTP客户端和服务端具体的实现方式。内置的net/http包提供了最简洁的HTTP客户端实现方式,无须借助第三方网络通信库,就可以直接使用HTTP中用得最多的GET和POST方式请求数据。 fun…

一道很简单的面试题,怎么那么多人不会?

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 最近帮公司招聘,主要负责一面,所以基本上问的基础多一点。但是我在…

【云计算与虚拟化】第五章—— vCenter Server的高级功能

第五章—— vCenter Server的高级功能 1、在ESXi01中,新建一个资源池,命名为polo,将ESXi01上的虚拟机加入其中,CPU资源设置如下:份额正常,预留自定义,限制自定义,不可扩展预留,内存…

新版电脑微信怎么锁屏?不能升级到新版本又怎么锁?

#微信新增锁定功能# 许多小伙伴在工作或家里用电脑时都不想让别人私自看到自己微信的聊天记录,手机端还好,毕竟会自动锁屏,而且开屏也简单,只需指纹或人脸、手势就行,但电脑端就比较麻烦了,只要人一离开&a…

Intewell智能工业操作系统,助力制造业智能化发展

软件定义控制 ——工业操作系统是工业互联网的核心,也是工业产业生态的核心,更是工业时代安全的基石。基于软件定义控制的智能工业操作系统,是我国工业发展、工业安全、工业未来的核心。 日前,以“筑牢粤港澳软件产业新生态、打…

组合总和-回溯

1题目 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,…

全场景,新技术,维视智造携重磅产品实力收官SNEC2023

5月26日, SNEC第十六届(2023)国际太阳能光伏与智慧能源(上海)大会暨展览会 圆满落幕 。 展会期间维视 智造旗下视觉检测系统、光伏组件生产核心场景检测方案等高口碑产品悉数 亮相,吸引了众多观众驻足观摩。 喜看稻菽千重浪!接下来让我们一起…