跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Kotlinjava

Kotlin 相等性判断:结构相等与引用相等详解

Kotlin 中的相等性判断主要分为结构相等与引用相等。结构相等通过 == 实现,底层调用 equals() 并处理空指针;引用相等通过 === 判断对象身份。浮点数比较遵循 IEEE 754 标准,需注意 NaN 与正负零的特殊行为。掌握这两者的区别有助于避免逻辑错误,特别是在处理对象状态和数值计算时。

DevStack发布于 2018/2/9更新于 2026/8/130 浏览
Kotlin 相等性判断:结构相等与引用相等详解

相等性判断

在 Kotlin 开发中,理解相等性至关重要。我们通常遇到两种情况:一种是对象内容的'结构相等',另一种是对象身份的'引用相等'。

结构相等

日常使用的 == 和 != 操作符实际上是在检查结构相等。编译器会将 a == b 展开为如下逻辑:

a?.equals(b) ?: (b === null)

这意味着如果 a 不为空,它会调用 equals(Any?) 方法;如果 a 为空,则直接判断 b 是否也为空。特别需要注意的是,当你拿一个变量去和 null 比较(例如 a == null)时,Kotlin 会自动将其视为引用比较 a === null,这样既安全又高效。

引用相等

如果你需要严格判断两个变量是否指向堆内存中的同一个对象实例,请使用 === 和 !==。只有当 a 和 b 指向同一对象时,a === b 才返回 true。

对于基本数据类型(如 Int),== 比较的是数值大小,而 === 比较的是引用地址。虽然在 Kotlin 的小整数缓存机制下,某些情况下两者的结果可能碰巧一致,但从语义上讲,它们有着本质的区别。

浮点数比较

处理 Float 或 Double 时,Kotlin 遵循 IEEE 754 标准。这里有两个细节容易踩坑:

  1. NaN 不等于 NaN(即 NaN == NaN 为 false)。
  2. 0.0 和 -0.0 被视为不相等。

这些规则在处理科学计算或金融数据时需要格外留意。

目录

  1. 相等性判断
  2. 结构相等
  3. 引用相等
  4. 浮点数比较
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 人工智能、机器学习和深度学习到底是什么关系
  • C++ TCP Socket 网络编程基础与封装实战
  • 快速创建适配 imToken DApp 浏览器的区块链小游戏应用
  • bit7z:C++ 压缩解压缩库快速上手指南
  • 利用 AI 工具实现网页 UI 1:1 复刻实战指南
  • C++ STL 中 map 与 set 容器的核心用法与实战
  • AI 写作辅助平台评测:炼字工坊与蛙蛙写作
  • AIGC 时代 C++ 吞吐量优化技巧与性能提升实践
  • Stable Diffusion ComfyUI 整合包安装与部署指南
  • OpenClaw 接入 QQ 机器人完整部署指南
  • C++11 核心特性详解:列表初始化、右值引用与移动语义
  • OpenClaw 部署飞书机器人
  • C++ 二叉搜索树原理与增删查实现详解
  • Zotero GPT插件深度解析
  • YOLOv10n-SOEP-PST 助老机器人目标检测系统详解
  • C++ 模板与 string 类使用指南
  • Python 零基础学习指南
  • GitHub Copilot 智能编程助手功能详解
  • AI 大模型 Token 收费机制与技术原理详解
  • 本地离线部署 Whisper 语音转写

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online