Java中全部8个基本类型均支持自动装箱/拆箱,对应Integer、Boolean等包装类;典型场景包括赋值、方法传参、集合操作及三元运算;需注意Integer缓存范围(-128~127)及null导致的NPE风险。

Java 中基本数据类型(如 int、boolean、double 等)与对应的包装类(如 Integer、Boolean、Double)之间,通过自动装箱(Autoboxing)和自动拆箱(Unboxing)机制实现无缝转换。编译器在后台自动插入包装类构造或 xxxValue() 方法调用,开发者无需手动写 new Integer(100) 或 i.intValue()。
哪些类型支持自动装箱
所有 8 个基本类型都有对应包装类,均支持自动装箱/拆箱:
- int ↔ Integer
- boolean ↔ Boolean
- char ↔ Character
- byte ↔ Byte
- short ↔ Short
- long ↔ Long
- float ↔ Float
- double ↔ Double
自动装箱发生的典型场景
以下情况编译器会自动完成装箱:
- 将基本类型赋值给包装类变量:
Integer i = 100;(等价于Integer i = Integer.valueOf(100);) - 方法参数为包装类,传入基本类型:
list.add(42);(add(Integer)接收int) - 集合中存放基本类型值(因集合只能存对象):
List<integer> nums = Arrays.asList(1, 2, 3);</integer> - 三元运算符中类型不一致时(如
boolean ? Integer : null)会触发装箱
注意缓存与 == 比较陷阱
Integer.valueOf(int) 在 -128 到 127 范围内复用缓存对象,超出范围则新建实例:
立即学习“Java免费学习笔记(深入)”;
-
Integer a = 100, b = 100;→a == b为 true(同引用) -
Integer c = 200, d = 200;→c == d为 false(不同对象) - 安全比较应始终用
.equals(),而非==
自动拆箱也需警惕空指针
当包装类变量为 null 时,自动拆箱会抛出 NullPointerException:
-
Integer x = null; int y = x;→ 运行时报错 -
if (x != null && x > 0)中,x > 0触发拆箱,若x为null仍会崩溃 - 建议显式判空,或使用
Objects.equals()、Optional等更安全方式
自动装箱简化了代码,但本质是语法糖,背后有对象创建、缓存策略和空值风险。理解其原理有助于写出健壮、可维护的 Java 代码。


















