自动装箱是基本类型转包装类(如int→Integer),调用valueOf();拆箱反之,调用xxxValue();易错点:null拆箱抛NPE,缓存外==比较结果为false。

记住自动装箱与拆箱,关键不是背定义,而是抓准三个锚点:谁转谁、怎么转、在哪容易翻车。下面用最直白的方式帮你串起来。
谁转谁:方向必须记死
装箱 = 基本类型 → 包装类(比如 int → Integer)
拆箱 = 包装类 → 基本类型(比如 Integer → int)
口诀:“装进去”是基本类型进对象,“拆出来”是对象吐出基本值。
怎么转:底层就两件事
编译器不是魔法,它只是悄悄帮你补了两行代码:
- 装箱时,实际调用的是 valueOf() 方法(如
Integer.valueOf(10)) - 拆箱时,实际调用的是 xxxValue() 方法(如
intValue()、booleanValue())
特别注意:Integer.valueOf() 在 -128 到 127 范围内会复用缓存对象,超出就 new 新对象——这直接影响 == 比较结果。
在哪容易翻车:两个高频坑必须盯紧
面试最爱问、线上最容易出问题的就这两类:
立即学习“Java免费学习笔记(深入)”;
-
null 拆箱直接 NPE:比如
Integer a = null; int b = a;,运行时报空指针——因为拆箱本质是调a.intValue(),而 a 是 null -
用 == 比较包装类对象:比如
Integer x = 128; Integer y = 128; System.out.println(x == y); // false,原因就是超出了缓存范围,两个不同对象
一句话收尾
装箱拆箱是语法糖,但糖里裹着缓存逻辑和空值风险;记清方向、认准方法、避开 null 和 ==,就能稳住面试和线上。


















