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

自动装箱 / 拆箱与IntegerCache缓存机制

public class Main { public static void main(String[] args) { int a = 10; int b = 10; Integer a1 = 10; Integer b1 = 10; Integer a2 = new Integer(10); Integer b2 = new Integer(10); System.out.println(a==b); // true 基本数据类型 System.out.println(a1==b1); // T -128~127 缓存 System.out.println(a2==b2); // F System.out.println(a1 == a); // T 自动拆箱 System.out.println(a1.equals(a));// T 自动拆箱 System.out.println(a1 == a2); // F System.out.println(a == a2); // T 自动拆箱 } }

一、代码逐行结果与原理表

代码结果核心知识点
int a = 10; int b = 10;-int基本数据类型,变量直接存储数值本身
Integer a1 = 10; Integer b1 = 10;-Integer包装类,这里发生了自动装箱IntegerCache缓存-128~127的对象
Integer a2 = new Integer(10);-new Integer()会在堆中创建全新对象,不使用缓存
a == btrue基本类型==直接比较数值本身10 == 10
a1 == b1true两个Integer都来自缓存池,指向同一个对象,地址相同
a2 == b2false两个new Integer()是不同堆对象,地址不同,==比较的是地址
a1 == atrue包装类与基本类型用==比较时,包装类自动拆箱int,再比较数值
a1.equals(a)trueInteger.equals()会自动装箱aInteger,然后比较数值本身
a1 == a2false两个不同来源的Integer对象,地址不同,==比较地址
a == a2truea2自动拆箱为int,和a比较数值,10 == 10

二、核心知识点拆解

1. 基本数据类型 vs 包装类
  • 基本类型(int:直接存储数值,==比较的是
  • 包装类(Integer:存储在堆中,是对象;==默认比较内存地址,只有equals()才比较数值
2. 自动装箱与自动拆箱
  • 自动装箱Integer a1 = 10;→ 编译器自动调用Integer.valueOf(10),把int包装成Integer对象
  • 自动拆箱a1 == a→ 编译器自动调用a1.intValue(),把Integer拆成int,再比较数值
  • 触发场景:包装类和基本类型用==+等运算符比较 / 运算时,会自动拆箱
3.IntegerCache缓存池
  • 缓存范围:默认-128 ~ 127(可通过 JVM 参数修改上限)
  • 作用:减少频繁创建小整数对象的开销
  • 规则:
    • Integer.valueOf(10)会直接返回缓存中的对象,所以a1 == b1true
    • new Integer(10)会强制创建新对象,不走缓存,所以a2 == b2false
4.==equals()的区别
场景==equals()
两个int比较数值不存在(基本类型无方法)
两个Integer比较内存地址比较包装的数值(Integer重写了equals
intInteger触发自动拆箱,比较数值触发自动装箱,比较数值

三、易错点

  1. 判断Integer数值是否相等,永远用equals(),不要用==因为超过缓存范围(比如128)的Integer对象,即使数值相同,==也会返回false
  2. new Integer()永远不走缓存,哪怕数值在-128~127之间,也是新对象。
  3. 包装类和基本类型比较时,会自动拆箱,此时==也能得到正确的数值比较结果,但代码可读性差,不推荐。
http://www.jsqmd.com/news/694866/

相关文章:

  • 人机环协同中的道法术器
  • 网络安全学习指南:信息安全专业就业方向与前景分析(建议收藏)
  • 2026 年郑州近视手术眼科机构选购攻略与推荐 - 速递信息
  • Mixly编译ESP32程序头文件缺失:bits/c++config.h的根源分析与修复
  • Vim配置拯救计划:手把手教你备份、迁移和版本化管理你的 .vimrc 与插件
  • Alt+Shift+1 至 Alt+Shift+9直接跳转定位
  • 为什么你的FP16 GEMM在H100上仅跑出42% peak?揭秘CUDA 13.1 cuBLASLt自动融合策略的3个致命配置陷阱
  • 告别模型加载黑屏!手把手教你用Assimp正确加载嵌入纹理的GLB模型(附完整C++/Qt代码)
  • 桶排序算法
  • C++中TAS和CAS实现自旋锁
  • vue2 和 vue3 的核心区别
  • N_m3u8DL-RE:跨平台流媒体下载工具的完整技术解析与实战指南
  • 免费B站视频转换终极指南:m4s-converter实现音视频资源永久保存
  • VSCode里调用本地大模型总报错?7类高频Error代码级诊断手册,资深架构师连夜整理
  • Atcoder-ABC-454-E LRUD Moving
  • 从混淆矩阵到决策曲线:用Matplotlib一步步拆解DCA背后的净获益计算
  • Phi-3.5-mini-instruct网页版惊艳效果:将微信聊天记录→会议纪要→待办事项清单三步生成
  • 2032 年全球微型直流电动机市场将达 226.5 亿美元
  • 基于YOLOv26深度学习算法的社区路灯故障检测系统研究与实现
  • C++函数重载和缺省参数:告别‘iAdd’和‘dAdd’,写出更优雅的代码
  • 【MATLAB源码-第423期】基于MATLAB的机器视觉与多特征融合迁移学习的道路裂多类别缺陷检测仿真。
  • 仅限首批200家三甲医院技术科获取的VSCode医疗校验配置包(含NMPA审评要点映射表)
  • AI图像分层终极指南:3分钟掌握layerdivider完整教程
  • 3步快速教程:免费在Windows 11上运行Android应用的完整方案
  • 《PySide6 GUI开发指南:QML核心与实践》 第八篇:性能优化大师——QML应用性能调优实战
  • Jetson Xavier NX开机慢?试试调整UEFI这3个设置,启动速度立竿见影
  • 【VSCode协作效率翻倍实战手册】:基于LSP+CRDT双引擎重构的6步优化路径,仅限内部团队验证的3项未公开配置
  • 2026-2032期间,电池包断路单元(BDU)市场年复合增长率(CAGR)为9.1%
  • 系统进入强震荡或失稳状态
  • 从Colab到Kaggle:手把手教你用Accelerate在免费GPU/TPU笔记本里跑通PyTorch大模型训练