Java高频面试之SE-10
hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶
equals和 == 的区别?
在 Java 中,equals()
方法和 ==
运算符都是用于比较两个对象之间的相等性,但它们的工作原理和用途有明显的不同。
1. ==
运算符
- 定义:
==
是一个运算符,用于比较两个引用变量的内存地址(即它们是否指向同一个对象)。 - 用法:当使用
==
运算符比较对象时,实际上是在比较对象的引用是否相同。 - 基本数据类型:对于基本数据类型(如
int
、char
等),==
运算符比较它们的值。
示例:
String str1 = new String("Hello");
String str2 = new String("Hello");System.out.println(str1 == str2); // 输出 false, 因为它们是不同的对象
2. equals()
方法
- 定义:
equals()
是Object
类中的一个方法,通常被重写以提供对象内容的比较。 - 用法:通常开发者在自定义类中重写
equals()
方法,以比较对象的属性值,从而实现基于内容的相等性比较。 - 默认实现:如果没有重写,
equals()
方法的默认实现与==
相同,因此会比较对象的引用。
示例:
String str1 = new String("Hello");
String str2 = new String("Hello");System.out.println(str1.equals(str2)); // 输出 true, 因为它们的内容相同
总结
特性 | == | equals() |
---|---|---|
比较内容 | 比较引用(内存地址) | 比较对象内容(经过重写时) |
默认行为 | 是否指向同一内存地址 | 默认行为是比较引用 |
适用类型 | 基本数据类型和对象引用 | 主要用于对象,特别是重写后可比较内容 |
常见使用 | 判断是否是同一个对象 | 判断两个对象内容是否相等 |
注意事项
- 字符串比较:在比较字符串时,推荐使用
equals()
方法而不是==
,因为==
只会比较引用。 - 重写
equals()
时:如果重写了equals()
方法,通常还需要重写hashCode()
方法,以保证在散列集合(如HashMap
、HashSet
)中能正确工作。 - Null安全:在调用
equals()
方法时,应确保对象不为null
,以避免NullPointerException
。通常推荐使用Objects.equals(a, b)
方法来进行安全比较。
为什么重写 equals 时必须重写 hashCode ⽅法?
在 Java 中,当重写 equals()
和 hashCode()
方法时,确保这两个方法之间的一致性是非常重要的。这是因为它们在 Java 对象的比较和使用散列数据结构(如 HashMap
、HashSet
等)时扮演着关键角色。以下是具体原因:
1. 合同原则
Java 中 Object
类的 equals()
和 hashCode()
方法有一种关系,称为 合同原则。根据这一原则:
- 如果两个对象是相等的(即
a.equals(b)
返回true
),那么这两个对象的hashCode()
值必须相等。这意味着hashCode()
方法必须返回相同的值。 - 如果两个对象的
hashCode()
值相等,两个对象不一定相等(即a.equals(b)
不一定为true
)。这种情况是允许的,不过这是不可逆的,也就是说两个对象不同,但它们的hashCode()
值可以相同(这称为哈希冲突)。
2. 散列数据结构的性能
在 Java 的散列集合(例如 HashMap
和 HashSet
)中,对象的存储和查找依赖于哈希代码。当将对象放入一个哈希集合时,Java 首先计算对象的 hashCode()
值,以确定该对象在内部数据结构中的位置。
- 当使用
add
、remove
或contains
方法时,Java 会首先使用hashCode()
方法来找到可能存储该对象的桶(bucket)。如果两个对象的hashCode()
值不同,它们必然被放在不同的桶中,Java 会在不同的桶中寻找。 - 如果重写了
equals()
方法而没有重写hashCode()
方法,那么两个相等的对象可能会被放入相同的集合中,因为它们的hashCode()
值相同。如果检查一个对象是否存在于集合中,并且hashCode()
考虑到了该对象的状态不一致,这将导致潜在的错误。例如,两个不同的对象(基于==
的比较)可能具有相同的hashCode
,而这些对象在散列集合中可能会出现问题。
3. 可能产生的错误
假设你重写了 equals()
方法以比较对象的属性,但没有重写 hashCode()
方法,这可能会导致以下问题:
- 在
HashSet
中,如果你插入两个相等的对象,而它们的hashCode()
不同,那么即使它们是逻辑上相等的,集合仍会存储两个不同的对象。 - 在
HashMap
中,作为键的对象若基于逻辑内容重写equals()
而不重写hashCode()
,会导致存储和查找行为不一致,可能无法正确找到或更新与某个键关联的值。
示例demo
以下是一个demo,展示如何在重写 equals()
方法时,也要重写 hashCode()
方法:
public class Person {private String name;private int age;// 重写 equals 方法@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (!(obj instanceof Person)) return false;Person other = (Person) obj;return this.name.equals(other.name) && this.age == other.age;}// 重写 hashCode 方法@Overridepublic int hashCode() {int result = name.hashCode();result = 31 * result + age;return result;}
}
总的来说重写 equals()
方法时必须重写 hashCode()
,以确保遵循 Java 语言关于对象比较的合同原则,维护哈希结构的正确性和性能。
IDEA ji huo
https://pan.quark.cn/s/4216736c0427
🎬大全
https://kdocs.cn/l/cqhxNU9I2lLD
12306回家科技
https://pan.quark.cn/s/45f6bf9be1b3
相关文章:
Java高频面试之SE-10
hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 equals和 的区别? 在 Java 中,equals() 方法和 运算符都是用于比较两个对象之间的相等性,但它们的工…...
Java 注解详解:RetentionPolicy 与 ElementType
文章目录 1. RetentionPolicy:注解的生命周期RetentionPolicy 的详细说明SOURCE 示例CLASS 示例RUNTIME 示例 2. ElementType:注解的应用范围ElementType 的详细说明ElementType 示例用于类用于方法用于局部变量 3. RetentionPolicy 与 ElementType 的结…...
javafx 将项目打包为 Windows 的可执行文件exe
要将 JavaFX 项目打包为 .exe 文件,你可以使用一些工具将你的应用程序封装为 Windows 可执行文件。以下是两种常用的方法: 方法 1:使用 jpackage(适用于 JDK 14 及更高版本) jpackage 是 JDK 内置的工具,…...
使用Chrome谷歌浏览器中内置翻译功能
谷歌Chrome浏览器作为全球最受欢迎的网络浏览器之一,提供了强大且便捷的内置翻译功能。这一功能帮助用户轻松跨越语言障碍,浏览试听包括音乐视频直播等网页内容了。 一、启用Chrome内置翻译功能 1、打开谷歌Chrome浏览器:确保你已经安装了最…...
Clojure语言的数据库编程
Clojure语言的数据库编程 引言 在当今社会,数据的处理和管理已经成为一个不可或缺的部分。无论是互联网应用、企业系统还是移动应用,都需要与数据库进行频繁的交互。因此,选择一种合适的编程语言和相应的库来进行数据库编程显得尤为重要。C…...
从零开始:使用VSCode搭建Python数据科学开发环境
引言 在数据科学领域,一个高效、稳定的开发环境是成功的关键。本文将详细介绍如何使用Visual Studio Code搭建一个完整的Python数据科学开发环境。通过本指南,您将学会: 安装和配置VSCode,包括基本设置和快捷键配置设置Python开…...
docker minio镜像arm64架构
minio版本为RELEASE.2021-09-03T03-56-13Z 原项目信创改造,服务器资源改为了arm64架构,统信uos docker镜像库内没有对应的minio镜像,当前镜像为拉取源码后,自编译打包镜像,亲测可用。 使用方式 将tar包导入到服务器…...
arcgisPro加载CGCS2000天地图后,如何转成米单位
1、导入加载的天地图影像服务,一开始是经纬度显示的。 2、右键地图,选择需要调整的投影坐标,这里选择坐标如下: 3、点击确定后,就可以调整成米单位的了。 4、切换后结果如下: 如有需要,可调整成…...
MySQL Binlog 监听方案
如果 EmbeddedEngine 类在 debezium-connector-mysql 中不可用,原因是 Debezium 的新版本移除了 EmbeddedEngine。这是因为 Debezium 的架构变更,它现在鼓励使用 Kafka Connect 或 Debezium Server 来处理数据变更事件。 下面是几种替代方法来实现 MySQ…...
openai swarm agent框架源码详解及应用案例实战
文章目录 简介数据类型Agent类Response类Result类Swarm类run_demo_loop交互式会话 基础应用agent-handsofffunction-callingcontext_variablestriage_agent 高阶应用通用客服机器人(support bot)构建航班服务agent 参考资料 openai 在24年10月份开源了一个教育性质的多agents协…...
Qt 5.14.2 学习记录 —— 팔 QWidget 常用控件(3)
文章目录 1、cursor2、font3、toolTip4、focusPolicy5、styleSheet 1、cursor 改变鼠标光标形状。 在Qt Designer界面中,拖一个按钮过来,右边属性面用户可以自己改cursor属性。 代码方法,先拖一个按钮到界面上: #include <Q…...
Nginx (40分钟学会,快速入门)
目录 一、什么是Nginx ? 可以做什么 ? 二、正向代理和反向代理 三、负载均衡 四、动静分离 五、Nginx 常用命令 六、Nginx实战及总结 一、什么是Nginx ? 可以做什么 ? Nginx 是高性能的 HTTP 和反向代理的 web 服务器,…...
C# 中await和async的用法(一)
在 C# 中,await 关键字用于异步编程,配合 async 方法一起使用。await 允许你等待异步操作完成,而不会阻塞当前线程。简而言之,await 会暂停当前方法的执行,直到任务完成,然后继续执行。 1. await与async的关…...
前端JS中var、let、const之间的区别
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、var 二、let 三、const 四、区别 变量…...
【pyqt】(八)ui文件使用
ui文件使用 前面我们已经学过了简单的UI文件创建(利用Qt Designer)和基础控件的使用。现在我们学习如何把二者融合起来完成开发。UI文件以 XML 格式存储界面的布局和各种控件的属性,我们可以利用Qt Designer开发界面,然后利用代码…...
H2数据库在单元测试中的应用
H2数据库特征 用比较简洁的话来介绍h2数据库,就是一款轻量级的内存数据库,支持标准的SQL语法和JDBC API,工业领域中,一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…...
ios越狱脚本巨魔商店安装教程
使用爱思助手安装 安装爱思助手:在电脑上安装 iTunes 和爱思助手,并使用 Apple ID 登录2。 IPA 签名:打开爱思助手,选择工具箱中的 IPA 签名。点击添加 IPA 文件,选择下载的 TrollInstallerX.ipa 文件。选择使用 Apple…...
Linux C编程——文件IO基础
文件IO基础 一、简单的文件 IO 示例二、文件描述符三、open 打开文件1. 函数原型2. 文件权限3. 宏定义文件权限4. 函数使用实例 四、write 写文件五、read 读文件六、close 关闭文件七、Iseek 绍 Linux 应用编程中最基础的知识,即文件 I/O(Input、Outout…...
【Rust自学】10.4. trait Pt.2:trait作为参数和返回类型、trait bound
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 说句题外话,写这篇的时间比写所有权还还花的久,trait是真的比较难理解的概念。 10.4.1. 把trait作为参数 继续以…...
Java 中的 getDeclaredMethod() 方法:使用与原理详解
在 Java 反射机制中,getDeclaredMethod() 是一个非常重要的方法,用于获取类中声明的特定方法(包括公共、保护、默认和私有方法)。与 getMethod() 不同,getDeclaredMethod() 可以访问类的所有方法,而不仅仅是…...
解决npm报错:sill idealTree buildDeps
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 报错信息 使用 npm 安装依赖时报错:sill idealTree buildDeps 解决方案 请按照以下步骤进行相关操作: 1、删除 C:\Users{账户}\ 文件夹中的 .npm…...
【游戏设计原理】55 - 风险评估
从本文讲述的内容来看,其实使用“游戏中的决策”作为标题更合适。 核心观点:玩家在游戏中不断进行决策,这些决策涵盖风险评估、资源分配、策略选择等多个方面,其核心是通过选择实现最大化回报或最小化损失。关键内容:…...
【AI日记】25.01.08
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI 参加:kaggle 比赛 Forecasting Sticker Sales 读书 书名:国家为什么会失败阅读原因:2024 年诺贝尔经济学奖得主的力作未删减版:https://boo…...
SAP BC 同服务器不同client之间的传输SCC1
源配置client不需要释放 登录目标client SCC1...
用Cline打造你的智能搜索助手:Tavily Search MCP集成指南
引言 本文将详细介绍如何在Cline编辑器中集成Tavily Search智能搜索功能。我们将从MCP(Model Context Protocol)协议基础开始,深入探讨Tavily Search MCP服务器的安装配置、使用方法,以及进阶的二次开发技巧。无论你是AI开发者还…...
未来商贸物流:人工智能与大数据的深度融合
未来商贸物流:人工智能与大数据的深度融合 在当今数字化浪潮汹涌澎湃的时代,商贸物流行业正站在变革的十字路口,而人工智能与大数据宛如一对闪耀的双子星,为其照亮前行的道路,深度融合之下,一个全新的未来…...
网络安全、Web安全、渗透测试之笔经面经总结(三)
本篇文章涉及的知识点有如下几方面: 1.什么是WebShell? 2.什么是网络钓鱼? 3.你获取网络安全知识途径有哪些? 4.什么是CC攻击? 5.Web服务器被入侵后,怎样进行排查? 6.dll文件是什么意思,有什么…...
BMS应用软件开发 — 3 电池系统的组成
目录 1 电池的基本拓扑 2 已经被淘汰的CTM 3 早已经普及的CTP 4 集成度更高的CTC 5 刚性更好的CTB 1 电池的基本拓扑 相比于燃油车,虽然电动车在结构空间上灵活度更高,空间利用率也更好,但现有条件下无法像燃油车一样快速补能ÿ…...
springboot 项目使用nacos注册中心配置,在windows系统下打jar包后不能启动的一个不好排查的问题
起因,一个项目使用的nacos注册中心配置,想学习运维一些知识,项目在本地idea,无论是run,debug模式,都可以正常运行。就学习如何打包,打包好后,如何运jar包,都启动不起来&a…...
Git撤销指定commit并更新远端仓库
Git撤销指定commit并更新远端仓库 一、撤销指定commit 1.首先执行git log 命令,查看git历史提交以及commit信息: 由于需要脱敏,所以截图可能看得马赛克比较多,需要关注的就是上面的commit后跟的id,以及HEAD当前指定…...
校园约拍微信小程序设计与实现ssm+论文源码调试讲解
4 系统设计 校园约拍微信小程序的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没…...
开源靶场1
我来为您介绍一些知名的开源漏洞靶场平台: DVWA (Damn Vulnerable Web Application) 最流行的 Web 漏洞靶场之一包含 SQL 注入、XSS、文件包含等常见漏洞基于 PHP MySQL适合 Web 安全入门学习 WebGoat OWASP 开源项目基于 Java包含大量 Web 安全漏洞练习提供详细的教程和解…...
iOS开发指南:保护服务器密码的安全存储与处理技巧
在iOS开发过程中,服务器密码的安全存储与处理是确保应用安全性的关键环节。不当的密码管理可能导致数据泄露、用户隐私受损,甚至引发更严重的安全问题。因此,开发者需要采取一系列措施来保护服务器密码的安全。本文将详细介绍在iOS开发中如何…...
《Spring Framework实战》9:4.1.4.依赖注入
欢迎观看《Spring Framework实战》视频教程 典型的企业应用程序不是由单个对象(或Spring术语中的bean)组成。即使是最简单的应用程序也有几个对象协同工作,以呈现最终用户所认为的连贯应用程序。下一节将解释如何从定义多个独立的bean定义到一…...
linux之自动挂载
如果想要实现自动挂载,应该挂在客户端!!!!! 客户端: [rootlocalhost ~]# yum install nfs-utils -y (下载软件) [rootlocalhost ~]# systemctl start nfs-utils.servic…...
python+fpdf:创建pdf并实现表格数据写入
目录 创建pdf文件对象 新增页 添加自定义字体 设置字体 设置文字颜色和背景色 插入内容 换行 插入图片 保存pdf 完整代码 安装:pip install fpdf 创建pdf文件对象 from fpdf import FPDF, Alignpdf = FPDF() # 创建pdf文件对象 获取边距 print(pdf.l_margin, p…...
比较procfs 、 sysctl和Netlink
procfs 文件系统和 sysctl 的使用: procfs 文件系统(/proc) procfs 文件系统是 Linux 内核向用户空间暴露内核数据结构以及配置信息的一种方式。`procfs` 的挂载点是 /proc 目录,这个目录中的文件和目录呈现内核的运行状况和配置信息。通过读写这些文件,可以查看和控制内…...
第四、五章补充:线代本质合集(B站:小崔说数)
视频1:线性空间 原视频:【线性代数的本质】向量空间、基向量的几何解释_哔哩哔哩_bilibili 很多同学在学习线性代数的时候,会遇到一个困扰,就是不知道什么是线性空间。因为中文的教材往往对线性空间的定义是非常偏数学的&#x…...
Clojure语言的函数实现
Clojure语言函数实现详解 引言 Clojure是一种基于Java虚拟机的函数式编程语言,以其简洁和强大的数据处理能力而著称。在Clojure中,函数是基本的构造块,良好的函数设计可以提高代码的可复用性和可维护性。本文将深入探讨Clojure中的函数实现…...
Windows10环境下安装RabbitMq折腾记
最近有个老项目需要迁移到windows10环境,用的是比较老的rabbitmq安装包,如下所示。经过一番折腾,死活服务起不来,最终果断放弃老版本启用新版本。现在把折腾过程记录下: 一、安装erlang 安装完成后的目录结构ÿ…...
【前端,TypeScript】TypeScript速成(九):async-await 语法糖
async-await 语法糖 可以使用 async-await 来管理 Promise,下例重写上一节使用 Promise then 的形式计算 ( 2 3 ) ( 4 5 ) (23) \times (45) (23)(45): function add(a: number, b: number): Promise<number>{return new Promise((resolve,…...
基于ADAS 与关键点特征金字塔网络融合的3D LiDAR目标检测原理与算法实现
一、概述 3D LiDAR目标检测是一种在三维空间中识别和定位感兴趣目标的技术。在自动驾驶系统和先进的空间分析中,目标检测方法的不断演进至关重要。3D LiDAR目标检测作为一种变革性的技术,在环境感知方面提供了前所未有的准确性和深度信息. 在这里&…...
STM32供电参考设计
STM32供电参考设计 在图中有VDD,VSS和VDDA,VSSA两种类型的供电引脚,其数据手册解释如下: 令我不解的是:VDDA和VSSA必须分别连接到VDD和VSS,这是什么意思?有大佬能够解答一下吗?…...
C/C++头文件uitility
在C中,<utility>头文件提供了一些通用的工具类和函数,这些工具类和函数在编写高效、可读性强的代码时非常有用。以下是<utility>头文件中一些常用函数和类的详细介绍及使用示例: std::pair:一个模板类,用于…...
Nature Electronics——近传感器计算:50 nm异构集成技术的革命
创新点:1.高密度互联设计:基于二维材料,开发出互连密度高达62,500 I/O每平方毫米的M3D集成结构。2.异构层堆叠:整合了第二层石墨烯化学传感器和第一层MoS₂记忆晶体管,实现功能互补。3.超短传感器与计算元件距离&#…...
腾讯云AI代码助手编程挑战赛-图片转换工具
作品简介: 解决了人们学习生活中的图片格式转换问题, 制作该脚本,省去了打开在线编辑器操作的时间, 免费为用户提供图片格式的转换的实用小工具 技术架构 python语言的tk库来完成的GUI页面设计, 引用PIL包转换图…...
英伟达Project Digits赋能医疗大模型:创新应用与未来展望
英伟达Project Digits赋能医疗大模型:创新应用与未来展望 一、引言 1.1 研究背景与意义 在当今数字化时代,医疗行业作为关乎国计民生的关键领域,正面临着前所未有的挑战与机遇。一方面,传统医疗模式在应对海量医疗数据的处理、复…...
查找路由器的管理后台ip【通用找IP】
需求: 刚刚搞了个【小米】路由器,我想进路由的管理后台,提示:安装xx的路由管家,我不想安装 但是无法找到这个管理后台。 而且我是用这个路由作为中继,那么这个路由的ip就会经常更换 尝试通过网上搜索引擎来…...
Nginx:Stream模块
什么是 Stream 模块? Stream 模块 是 Nginx 的一个核心模块,专为处理非 HTTP 协议的流量(TCP 和 UDP 流量)而设计。它可以用来负载均衡和代理 TCP 或 UDP 连接,适用于多种应用场景,如: 数据库集群(MySQL、PostgreSQL 等)邮件服务器(SMTP、IMAP、POP3)游戏服务器VoI…...
C++语言的并发编程
C语言的并发编程 引言 随着计算机技术的飞速发展,尤其是多核处理器的普及,如何高效地利用计算机资源成为了一个重要话题。在这个背景下,并发编程已经成为了一种必须掌握的技能。C作为一种强大的编程语言,也提供了丰富的工具和库…...