跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 中 Integer 对象比较陷阱解析

Java Integer 对象比较存在陷阱,使用 == 运算符比较可能因自动装箱机制导致意外结果。这是因为 Integer.valueOf 方法内部维护了 -128 到 127 的缓存池,范围内的值返回同一对象引用,范围外则新建对象。因此比较 Integer 值应始终使用 equals 方法而非 ==,避免混淆引用地址与数值相等性。

Kubernet发布于 2020/6/27更新于 2026/10/22102 浏览
Java 中 Integer 对象比较陷阱解析

Java 中 Integer 对象比较陷阱

在 Java 开发中,直接使用 == 比较两个 Integer 对象的值往往会产生意想不到的结果。

现象

考虑以下代码:

Integer i = 128;
Integer j = 128;
System.out.println(i == j);

上述代码输出结果为 false。然而对于小数值:

Integer a = 100;
Integer b = 100;
System.out.println(a == b);

此时输出结果为 true。为什么会出现这种情况?

原理分析

Java 编译器在处理装箱操作时,会调用 valueOf 方法。查看 Integer.valueOf 的实现可以发现,为了避免重复创建对象,JVM 对 Integer 值做了缓存。

IntegerCache 是一个内部静态类,用于管理缓存数组。初始化时加载 JVM 配置,若未配置,默认缓存范围为 -128 到 127。

当数值在缓存范围内时,直接返回缓存对象(引用相同,== 为 true);超出范围则新建对象(引用不同,== 为 false)。

结论

在比较两个 Integer 对象的值时,无论声明方式如何,务必使用 equals 方法进行比较,严禁使用 ==。

Java 中没有重载操作符的概念,特别是从其他语言转至 Java 的开发者需注意此差异。

目录

  1. Java 中 Integer 对象比较陷阱
  2. 现象
  3. 原理分析
  4. 结论

更多推荐文章

查看全部
  • 基于 HDFS 的 Web 云盘管理系统
  • RAG 系统实现指南:Langchain 与纯手搓方案对比
  • 扁鹊 -2.0 中文医疗大模型介绍与部署
  • 主流 AI 编程工具定价对比:Cursor、Windsurf、Kiro、Zed 与 VS Code
  • Python YAML 模块使用指南:接口测试参数存储与配置
  • MCPHost:通过命令行让大模型与外部工具交互
  • OpenClaw 本地优先 AI 智能体:从安装到实战部署指南
  • 数据结构:队列的完整实现
  • Stable Diffusion 模糊头像照片高清修复教程:结合 ControlNet 与局部重绘
  • 云端多模型并行部署与写作能力对比测试方案
  • VSCode 本地部署 DeepSeek,打造私人 AI 编程助手
  • 近端策略优化算法 PPO 详解与代码实现
  • 2025 年 12 月 C++ 一级真题解析:电子学会编程等级考试
  • 鸿蒙分布式智能办公应用架构设计与性能优化
  • Python 爬虫入门实战:从请求到数据保存
  • 自然语言处理在金融领域的应用与实战
  • 前端响应式进阶:从 vw/vh 到 clamp() 的痛点与进化
  • 基于 Go 语言与 DeepSeek 大模型的 AIOps 监控系统构建实践
  • AI 入门:常见术语解释与误区澄清
  • 2025 年人工智能十大趋势及 AI 智能体能力级别

相关免费在线工具

  • 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