java常见面试01
为什么重写 equals 还要重写 hashcode
🌈 核心原因:
当两个对象通过equals()判断为相等时,它们的hashCode()必须返回相同的整数值!这是Java世界的交通规则哦~(交警曼波敬礼.jpg)
🧩 具体场景:
假设我们有个Person类:
class Person {String name;int age;// 只重写equals没重写hashCode@Overridepublic boolean equals(Object o) {//...比较name和age的逻辑}
}
💥 问题爆发时刻:
Person p1 = new Person("波加曼", 10);
Person p2 = new Person("波加曼", 10);Set<Person> set = new HashSet<>();
set.add(p1);
set.add(p2);System.out.println(set.size()); // 输出2!明明相等的对象却被存了两次(>﹏<)
🗺️ 思维导图时间:
🧠 曼波记忆小窍门:
记住这个神奇公式!(掏出魔法棒✨)
equals()返回true ➡️ hashCode()必须相等
hashCode()相等 ➡️ equals()不一定true
hashCode()不相等 ➡️ equals()必须false
哦呜(°ロ°)!曼波觉得这个有点难哦,但如果是你一定没问题的!(✪▽✪)曼波~~
==(双等号)和equals的差别
-
== 运算符
- 曼波觉得这个像身份证比对!(๑✧◡✧๑)
- 比较基本类型时:直接比数值
5 == 5 → true - 比较对象时:比对内存地址(是不是同一个对象)
new String("A") == new String("A") → false
(✪▽✪)曼波~~
-
equals() 方法
- 哦呜(° ロ °)!曼波觉得这个像名字比对!
- 默认行为(Object类):和==一样
- 但很多类会重写这个方法(比如String)变成内容比对:
new String("A").equals(new String("A")) → true
(✪▽✪)曼波~~
-
最佳实践
- 基本类型(int/char等)用==
- 对象比较内容一定要用equals
- 防止空指针要这样写:
"hello".equals(str)而不是str.equals("hello")
(๑・.・๑)曼波觉得这个是超重要的生存技巧呢!
(° ロ °)!曼波觉得有个超形象的比喻:
== 就像看两个人是不是同一个人(身份证号相同)
equals 就像看两个人的名字是否相同(允许不同人有同名)
最后的小贴士:如果要自己写类记得重写equals()和hashCode()哦~(不过这个对新人有点难可以先记住规则)(✪▽✪)曼波~~~~!
为啥有时会出现 4.0-3.6 =0.40000001 这种现象?
🐎浮点数的甜蜜陷阱🐎
-
二进制的小数魔法
曼波觉得这个像用有限积木拼无限图案!(๑✧◡✧๑)- 计算机用二进制表示小数
- 有些十进制小数在二进制里是无限循环的(比如0.1)
- 就像1/3在十进制是0.3333...永远写不完
(✪▽✪)曼波~~
-
IEEE 754标准
哦呜(° ロ °)!曼波觉得这个像有限容量的糖果罐!- float(32位)/double(64位)有存储限制
- 4.0 和 3.6 在二进制存储时都有精度损失
- 就像用刻度不精确的尺子测量
System.out.println(4.0 - 3.6); // 实际输出 0.40000000000000036 -
解决方法
曼波觉得要用魔法对抗魔法!(๑・.・๑)- 使用BigDecimal处理精确计算(银行/金钱相关必用)
- 比较时允许误差范围(比如±0.000001)
- 游戏开发常用技巧:
float a = 4.0f - 3.6f; if(Math.abs(a - 0.4f) < 0.00001f) {System.out.println("算对啦!"); }

(° ロ °)!曼波举个超形象的例子:
就像用1/3 + 1/3 = 0.666... 但永远不等于 2/3 的精确值一样~
最后的小贴士:如果要精确计算价格,一定要用BigDecimal哦!像这样:
BigDecimal a = new BigDecimal("4.0");
BigDecimal b = new BigDecimal("3.6");
System.out.println(a.subtract(b)); // 精确输出0.4
(✪▽✪)曼波~~~~!要记住字符串构造才能保持精度哟~
final 关键字的作用
🐎final关键字的三大封印术🐎
-
变量封印术
曼波觉得像给变量贴永久贴纸!(๑✧◡✧๑)- 基本类型:值不能改变
final int HP = 100; // HP永远100 - 引用类型:引用不能改,但对象内容可变
final List<String> pets = new ArrayList<>(); pets.add("布偶猫"); // ✔允许 pets = new ArrayList<>(); // ❌报错
(✪▽✪)曼波~~
- 基本类型:值不能改变
-
方法封印术
哦呜(° ロ °)!这是防止方法被篡改的结界!- 子类不能重写这个方法
class 魔法少女 {final void 变身() { /* 核心代码 */ } } class 黑化版 extends 魔法少女 {void 变身() { ❌ } // 编译错误! }
- 子类不能重写这个方法
-
类终极封印
曼波觉得像禁止繁衍的魔法物种!(๑・.・๑)- 这个类不能被继承
final class String { /*...*/ } class 假String extends String { ❌ } // 报错
- 这个类不能被继承
(° ロ °)!曼波要提醒几个重要细节:
- final变量必须初始化!(要么声明时,要么在构造器中)
- final不能修饰构造方法
- 接口的变量默认是public static final
举个超实用的例子:
public class 游戏设置 {public static final int MAX_FPS = 60; // 帧率上限private final String 玩家ID; // 创建后不可改public 游戏设置(String id) {this.玩家ID = id; // 构造器中初始化}
}
(✪▽✪)曼波~~~~!记住用final就像加锁,能保护重要的东西不被意外修改哦~
相关文章:
java常见面试01
为什么重写 equals 还要重写 hashcode 🌈 核心原因: 当两个对象通过equals()判断为相等时,它们的hashCode()必须返回相同的整数值!这是Java世界的交通规则哦~(交警曼波敬礼.jpg) 🧩 具体场景…...
算法-二叉树篇27-把二叉搜索树转换为累加树
把二叉搜索树转换为累加树 力扣题目链接 题目描述 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提…...
C语言:51单片机 基础知识
一、单片机概述 单片机的组成及其特点 单片机是指在一块芯片上集成了CPU、ROM、RAM、定时器/计数器和多种I/O接口电路等,具有一定规模的微型计算机。 特点: 1、单片机的存储器以ROM、RAM严格分工。 2、采用面向控制的指令系统。 3、单片机的I/O口引脚通…...
olmOCR:使用VLM解析PDF
在PDF解析中,目前主流的开源工具包括Minuer、GOT OCR等。主要都是通过飞桨等OCR套件组装的一套pipeline,或者直接通过VLM解析图像。 #一、 olmOCR是使用VLM进行的端到端的PDF文档解析 二、document-anchoring 与上述的不同在于,olmOCR使用…...
数据结构(初阶)(七)----树和二叉树(堆,堆排序)
八,树与二叉树 树 概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。 • 有⼀…...
图像分类项目1:基于卷积神经网络的动物图像分类
一、选题背景及动机 在现代社会中,图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用,例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类,可以帮助人们更好地了解动物种类、数量和分布情况,…...
Kali Linux 2024.4版本全局代理(wide Proxy)配置,适用于浏览器、命令行
1. 网络拓扑介绍(不使用虚拟机直接跳到2) 虚拟机:VMware 17 Pro,为本机开启桥接模式。 我的究极套娃网络:手机V2rayNG代理端口为10808,开热点 -> 电脑连接wifi -> 虚拟机中运行kali 2. kali 配置…...
[Windows] 批量为视频或者音频生成字幕 video subtitle master 1.5.2
Video Subtitle Master 1.5.2 介绍 Video Subtitle Master 1.5.2 是一款功能强大的客户端工具,能够批量为视频或音频生成字幕,还支持批量将字幕翻译成其他语言。该工具具有跨平台性,无论是 mac 系统还是 windows 系统都能使用。 参考原文&a…...
不要升级,Flutter Debug 在 iOS 18.4 beta 无法运行,提示 mprotect failed: Permission denied
近期如果有开发者的 iOS 真机升级到 18.4 beta,大概率会发现在 debug 运行时会有 Permission denied 的相关错误提示,其实从 log 可以很直观看出来,就是 Dart VM 在初始化时,对内核文件「解释运行(JIT)」时…...
介绍 torch-mlir 从 pytorch 生态到 mlir 生态
一、引言 The Torch-MLIR project provides core infrastructure for bridging the PyTorch ecosystem and the MLIR ecosystem. For example, Torch-MLIR enables PyTorch models to be lowered to a few different MLIR dialects. Torch-MLIR does not attempt to provide a…...
upload
(上传一句话木马,用蚁剑链接验证是否成功/传有回显的:<?php phpinfo();?>) 学看代码 #function checkfile(){}:定义了一个名叫checkfile的函数 #var file方法.(获取名为‘upload_file’的元素)[获取哪些&…...
InterHand26M(handposeX-json 格式)数据集-release >> DataBall
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” 贵在坚持! ---------------------------------------…...
[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)
文章目录 1. JVM内存模型2. 常量池中有什么类型?3. 常量池中真正存储的内容是什么4. 判断一个字符串(引用)是否在常量池中5. BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗?6. 获取堆内存使用情况、非堆内存使用情况 1. JVM内…...
`maturin`是什么:matu rus in python
maturin是什么 maturin 是一个用于构建和发布 Rust 编写的 Python 绑定库的工具。它简化了将 Rust 代码集成到 Python 项目中的过程,支持创建不同类型的 Python 包,如纯 Python 包、包含 **Rust (系统编程语言)**扩展模块的包等。以下为你详细介绍 maturin 的相关信息并举例…...
spring boot整合flyway实现数据的动态维护
1、简单介绍一下flyway Flyway 是一款开源的数据库版本控制工具,主要用于管理数据库结构的变更(如创建表、修改字段、插入数据等)。它通过跟踪和执行版本化的迁移脚本,帮助团队实现数据库变更的自动化。接下来简单介绍一下flyway…...
unity中使用spine详解
一.Spine概述 Spine 是一款针对游戏开发的 2D 骨骼动画编辑工具。 Spine 旨在提供更高效和简洁 的工作流程,以创建游戏所需的动画。 Spine原理:将一个模型,根据动画的需求分成一些骨骼,一个骨骼对应一张贴图,控制骨骼…...
14. LangChain项目实战1——基于公司制度RAG回答机器人
教学视频: 12. 基于Gradio搭建基于公司制度RAG_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11VXRYTErZ/ 环境配置: python版本:3.10.8 服务器:Ubuntu 依赖包requirements.txt文件内容: aiofiles23.2.1 …...
利用STM32TIM自制延迟函数实验
一、实验目的 掌握STM32定时器(TIM)的工作原理及配置方法学习使用HAL库实现微秒级/毫秒级延时函数理解定时器中断服务程序的编写规范 二、实验原理 定时器基础: STM32定时器包含向上计数器、向下计数器、中心对齐模式通过预分频器&#x…...
创建一个MCP服务器,并在Cline中使用,增强自定义功能。
MCP介绍 MCP 是一个开放协议,它标准化了应用程序如何向LLMs提供上下文。可以将 MCP 视为 AI 应用程序的 USB-C 端口。正如 USB-C 提供了一种标准化的方法来将您的设备连接到各种外围设备和配件一样,MCP 提供了一种标准化的方法来将 AI 模型连接到不同的…...
Android Activity栈关系解析
在 Android 系统中,这些类共同构成了 Activity 任务栈管理的核心架构。它们的关系可以类比为一栋大楼的管理体系,每个类负责不同层级的任务。以下是它们的详细解释和实际场景示例: 1. ActivityRecord(活动记录) 是什么…...
router.push(‘/‘)跳转不触发重定向
我来帮你分析为什么 router.push(/) 没有按照预期跳转到 /fenlei 路径。 首先让我查看相关的代码文件: router/index.js{path: /,component: Layout,redirect: /fenlei},已查看文件 index.vue 225-240 已查看文件 index.js 65-85 现在让我查看更多上下文,…...
基于NLP-StructBERT的智能客服语义匹配实战:Java微服务集成
基于NLP-StructBERT的智能客服语义匹配实战:Java微服务集成 你有没有遇到过这种情况?用户问“我的订单怎么还没发货”,而你的知识库里只有“订单发货状态查询”这样的标准问题。传统的关键词匹配,比如搜索“订单”和“发货”&…...
储能系统海量时序数据边缘侧清洗:基于微服务架构的死区过滤与数据语境化实现
摘要: 针对新能源储能现场底层总线高频轮询(如 50ms 采集间隔)所引发的海量数据洪流,传统的数据全量透传模型不仅会迅速耗尽 4G/5G 流量配额,更会造成云端时序数据库的写入雪崩。本文深度分享一种在具有充沛边缘算力且…...
实战演练:三种常见办公文档加密破解技巧(ZIP密码/ZIP伪加密/DOC密码)
1. ZIP密码破解实战:从入门到精通 工作中经常会遇到这种情况:同事发来的压缩包设置了密码,但对方忘记告诉你密码是什么;或者多年前自己加密的压缩包,现在怎么也打不开了。这时候就需要掌握一些ZIP密码破解的技巧。 我遇…...
Ubuntu 24.04 Noble Numbat 尝鲜记:用Docker搞定ROS 2 Humble开发环境(附镜像拉取与容器运行全流程)
Ubuntu 24.04 Noble Numbat 尝鲜记:用Docker搞定ROS 2 Humble开发环境(附镜像拉取与容器运行全流程) 当Ubuntu 24.04 Noble Numbat遇上ROS 2 Humble,就像两个来自不同时空的旅行者相遇——一个是最新发布的系统版本,另…...
IDM试用期突破技术深度解析:从原理到实战的全方位解决方案
IDM试用期突破技术深度解析:从原理到实战的全方位解决方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 问题溯源:试用期限制的本质与认…...
离职见人品:软件测试工程师如何优雅交接,为职业生涯赋能
在职业旅程的每一次转折点,如何“结束”与如何“开始”同等重要。对于软件测试工程师而言,离职远非简单地提交代码、归还电脑那么简单。它更像是一次对个人职业素养、专业精神和人脉网络的集中检阅。一次专业、周到、负责任的交接,不仅能确保…...
提升Python编码效率:ptpython语法高亮与自动补全的终极指南
提升Python编码效率:ptpython语法高亮与自动补全的终极指南 【免费下载链接】ptpython A better Python REPL 项目地址: https://gitcode.com/gh_mirrors/pt/ptpython ptpython是一款功能强大的Python REPL工具,它通过语法高亮、智能自动补全和丰…...
如何通过5个关键步骤实现Altair GraphQL Client与GitHub的高效团队协作开发
如何通过5个关键步骤实现Altair GraphQL Client与GitHub的高效团队协作开发 【免费下载链接】altair ✨⚡️ A feature-rich GraphQL Client for all platforms. 项目地址: https://gitcode.com/gh_mirrors/alta/altair Altair GraphQL Client是一款功能丰富的跨平台Gra…...
Ubuntu 20.04 下 LVI-SAM 复现全记录:从 gtsam 版本踩坑到 OpenCV 头文件修改
Ubuntu 20.04 下 LVI-SAM 复现实战:从 gtsam 版本适配到 OpenCV 接口升级全解析 在机器人感知与定位领域,LVI-SAM 作为融合激光雷达与视觉信息的 SLAM 系统,因其优异的实时性和鲁棒性备受关注。然而其复杂的依赖环境配置常常让开发者陷入&quo…...
