java包装类核心在于理解必要性与使用陷阱,涵盖三方面:8种基本类型与包装类的映射关系及命名规律;自动装箱(调用valueof)与拆箱(调用xxxvalue)机制及缓存陷阱(-128~127);常见陷阱如null拆箱npe、集合泛型要求、==与equals误用,以及工程实践中valueof优先、判空防护和场景化选型。

Java 包装类是面试中高频出现的基础考点,核心不在背名字,而在理解“为什么需要它”和“用错会怎样”。理清思路,重点抓三块:对应关系、装箱拆箱机制、实际使用陷阱。
包装类与基本类型的映射关系要记准
8个基本类型对应8个包装类,不是靠死记,而是按命名规律理解:
- int → Integer、double → Double、boolean → Boolean —— 直接首字母大写,最常用
- char → Character、byte → Byte —— 少数例外,Character多一个“er”,Byte缩写但不加“e”
- short/long/float 也同理:Short、Long、Float —— 注意大小写和拼写,面试常考手写或判断编译错误
装箱和拆箱的自动过程必须清楚边界
Java 5起支持自动装箱(primitive → wrapper)和自动拆箱(wrapper → primitive),但背后有隐含逻辑:
- 自动装箱本质是调用 valueOf() 方法,比如
Integer i = 100;等价于Integer i = Integer.valueOf(100); - 拆箱本质是调用 xxxValue() 方法,如
int n = i.intValue(); - 注意缓存陷阱:Integer.valueOf(-128 ~ 127) 返回缓存对象,超出范围则新建对象;所以
Integer a=127, b=127; a==b为 true,但a=128, b=128时为 false
常见面试陷阱题型要提前预判
面试官爱从细节里挖坑,这几类问题几乎必问:
-
null 拆箱异常:
Integer i = null; int n = i;运行时报NullPointerException—— 因为拆箱时调用i.intValue(),而 i 是 null -
集合只能存对象:List
编译不通过,必须用 List ,这是包装类存在的根本理由之一 - == 和 equals 的区别:比较两个 Integer,用 == 可能因缓存机制“碰巧对”,但语义上应始终用 equals;而 int 之间用 == 完全没问题
-
泛型擦除导致的限制:不能定义
List<int></int>或new ArrayList<int>()</int>,泛型只接受引用类型,包装类补上了这个缺口
实际开发中怎么用才稳妥
别光会答题,还要体现工程意识:
- 优先使用 valueOf() 而非 new Wrapper():new Integer(100) 总是新建对象,浪费内存;valueOf() 复用缓存,更高效
- 判空再拆箱:
if (num != null) { int value = num; },避免 NPE - 数值计算场景慎用包装类:循环里频繁装拆箱会产生大量临时对象,性能敏感代码建议用基本类型
- 数据库字段映射、JSON 解析等场景,包装类天然支持 null,比基本类型更能表达“缺失值”语义(如成绩为 null 表示未录入,0 表示得了零分)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











