Java中基本类型与包装类型转换通过自动装箱(如Integer i=10)和自动拆箱(如int b=a+3)实现,需防范null导致的NPE及==比较陷阱,推荐用valueOf()和xxxValue()手动转换以提升可控性与性能。

Java 中基本数据类型与包装类型之间的转换主要通过自动装箱(autoboxing)和自动拆箱(unboxing)完成,无需手动调用方法,但需注意空指针和性能边界。
自动装箱:基本类型 → 包装类型
编译器在赋值、方法传参或集合操作时,会自动将基本类型转为对应包装类对象。
-
直接赋值:如
Integer i = 10;,实际等价于Integer i = Integer.valueOf(10); -
集合存储:
List<integer> list = new ArrayList(); list.add(42);</integer>—— int 自动转为 Integer -
方法参数匹配:调用接收
Integer的方法时传入int值,编译器自动转换
自动拆箱:包装类型 → 基本类型
当需要数值运算、比较或传给接收基本类型参数的方法时,包装对象会被自动转为对应基本值。
-
算术运算:如
Integer a = 5; int b = a + 3;,a 自动拆箱为 int -
条件判断:
if (flag != null && flag)中,Boolean 对象自动转为 boolean 值 -
注意空指针:若包装类型变量为
null,拆箱会抛出NullPointerException
手动转换:valueOf 与 xxxValue()
显式转换更可控,适合需要明确语义或规避自动机制风险的场景。
立即学习“Java免费学习笔记(深入)”;
-
装箱推荐用 valueOf():如
Integer.valueOf(100),对 -128~127 范围内整数复用缓存对象,比new Integer(100)更高效 -
拆箱用 xxxValue():如
int i = integerObj.intValue();,明确表达意图,且不会因 null 导致隐式 NPE(但仍需判空) -
字符串转数值:用
Integer.parseInt("123")得到 int,Integer.valueOf("123")得到 Integer 对象
常见陷阱与建议
看似简单,但实际开发中容易踩坑。
-
== 比较陷阱:两个 Integer 对象用
==比较时,-128~127 范围内可能为 true(缓存复用),超出范围则为 false;应统一用.equals() -
null 拆箱崩溃:
Integer x = null; int y = x;运行时报 NPE;建议先判空或使用 Optional -
循环中避免频繁装箱:如
for (int i = 0; i 会创建大量 Integer 对象,可考虑用原始类型集合库(如 Eclipse Collections)优化


















