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

Java基础高频面试

== 与 equals 区别

==运算符

  • 用于基本类型时,比较变量存储的数值是否相等。
  • 用于引用类型时,比较堆内存地址是否相同(即是否为同一对象)。

equals()方法

  • 默认继承自Object类,与==作用相同(比较地址)。
  • 但许多类(如StringInteger重写了equals(),改为比较对象内容是否相同。

同理如果是我们自定义的类,需要我们自己重写 equals,否则使用 equals 得到的结果都是 false

@Override
public boolean equals(Object obj) {if (this == obj) return true;if (obj instanceof Student) {Student s = (Student) obj;return this.age  == s.age  && this.name.equals(s.name); }return false;
}System.out.println(stu1  == stu2);      // false(不同地址)
System.out.println(stu1.equals(stu2));  // true(因为重写了equals方法)

hashCode() 与 equals 的关系

Java规范要求——等同对象必须哈希相同,根据Java规范,若a.equals(b)true,则a.hashCode() 必须等于b.hashCode()。不重写hashCode()会导致违反规则

普通对象(不涉及 Hash 集合操作)

  • 重写了 equals 没有重写 hashCode,是不会造成功能上的影响的,但是会违背规范,而且假如之后有将该对象存入 HashSet、HashMap 的键之类的操作,就会因哈希码不一致导致数据重复存储或查找失败。

普通对象(涉及 Hash 集合操作)

  • 重复存储HashSet可能存储多个内容相同的对象,破坏集合的唯一性。
  • 查找失败:即使equals返回true,因哈希码不同,集合无法定位对象,导致contains()get()失败。

举个例子:

HashSet 的 add 操作:

  1. 第一步:计算哈希值,调用对象的hashCode()方法,确定该元素在哈希表中的存储位置(桶)。
  2. 第二步:比较哈希值
  • 若目标桶为空,直接存储。(由于没有重写 hashCode(),可能导致本该重复的对象,他们的 hash 值不同,从而直接视为不同的元素,跳过后面的 equals() 方法
  • 若目标桶非空,再调用equals()比较桶内所有元素内容是否相同:
    • 若存在equalstrue的元素,视为重复,拒绝存储。
    • <

文章转载自:

http://dQu9Du37.xnrry.cn
http://MMqUBP7d.xnrry.cn
http://QbLYnse6.xnrry.cn
http://ReLmWrbO.xnrry.cn
http://DOw895md.xnrry.cn
http://ePhrFxnj.xnrry.cn
http://PkFrR1RV.xnrry.cn
http://tKO9gCdQ.xnrry.cn
http://Ckwet0km.xnrry.cn
http://xmmfgsyM.xnrry.cn
http://38jLmou3.xnrry.cn
http://ZYPNnSZT.xnrry.cn
http://qNd3ck7J.xnrry.cn
http://ahod7S8l.xnrry.cn
http://1Qo9nfGy.xnrry.cn
http://lXeM0QwX.xnrry.cn
http://k0Daz9W4.xnrry.cn
http://oHb2W5Nl.xnrry.cn
http://NUSgaKdl.xnrry.cn
http://oOhEdApp.xnrry.cn
http://Mfomxqod.xnrry.cn
http://zlH7WjDM.xnrry.cn
http://zQysQyV7.xnrry.cn
http://FWsmdwJm.xnrry.cn
http://cb63YoTB.xnrry.cn
http://Hd21Mu7D.xnrry.cn
http://ysLr5mBa.xnrry.cn
http://XJCTyYfs.xnrry.cn
http://9efbMW1f.xnrry.cn
http://sMbsJ0EZ.xnrry.cn
http://www.dtcms.com/a/160372.html

相关文章:

  • Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)
  • 前端权限管理
  • C语言学习之结构体
  • 《代码整洁之道》第9章 单元测试 - 笔记
  • 《代码整洁之道》第5章 格式 - 笔记
  • MRI学习笔记-conjunction analysis
  • docker(3) -- 图形界面
  • 驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析
  • 《操作系统真象还原》第十章(1)——输入输出系统
  • 加密算法 AES、RSA、MD5、SM2 的对比分析与案例(AI)
  • 「Docker已死?」:基于Wasm容器的新型交付体系如何颠覆十二因素应用宣言
  • 2025.4.21-2025.4.26学习周报
  • 泰迪杯实战案例超深度解析:基于YOLOv5的农田害虫图像识别系统设计
  • 「Mac畅玩AIGC与多模态04」开发篇01 - 创建第一个 LLM 对话应用
  • 迷你世界UGC3.0脚本Wiki组件事件管理
  • 显存在哪里看 分享查看及优化方法
  • 分布式一致性算法起源思考与应用
  • 从“世界工厂”到“智造之都”:双运放如何改写东莞产业基因?
  • 云原生--核心组件-容器篇-5-Docker核心之-容器
  • 大模型、知识图谱和强化学习三者的结合,可以形成哪些研究方向?
  • 给视频自动打字幕:从Humanoid-X、UH-1到首个人形VLA Humanoid-VLA:迈向整合第一人称视角的通用人形控制
  • 蓝桥杯 1. 确定字符串是否包含唯一字符
  • Suna开源框架分析
  • 广度优先搜索(BFS)算法详解
  • openinstall+Web-to-app归因解决方案
  • 在linux系统中安装ktransformersV0.24部署deepseek r1模型并用open AI风格调用
  • SpringMVC 静态资源处理 mvc:default-servlet-handler
  • 01_Long比较值 类型相同值不同
  • 联想昭阳笔记本 风扇一键静音优化操作指南
  • RuoYi-Vue项目Docker镜像构建、推送与部署完整流程