Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

自动装箱和自动拆箱是什么?

查看完整题解

参考回答

直接回答

自动装箱是在允许的上下文中,把基本值转换为对应包装类型;自动拆箱则取得包装对象中的基本值。它们由编译器按语言规则处理,减少显式转换代码,但不会消除空值、数值范围、对象身份以及重载选择之间的差别。

讲清原理

把 int 加入 List<Integer>,会涉及装箱;把 Integer 用作普通整数运算,可能涉及拆箱。拆箱一个 null 会抛 NullPointerException,这常发生在集合查询无结果、可空数据库字段或条件表达式中。

不同转换还有组合限制,不能任意把 int 自动变成 Long。装箱后的缓存也只说明部分对象可以复用,不能作为业务相等性规则。

例子与易错点

Integer value = 3; // 装箱
int count = value; // 拆箱
System.out.println(count); // 3
Integer absent = null;
try {
    int n = absent;
} catch (NullPointerException e) {
    System.out.println("不能拆箱 null");
}

选择 int 还是 Integer,要看是否需要可空含义以及 API 要求。若“不存在”与数值 0 含义不同,不能为了躲开异常就一律把 null 静默改成 0。

相关题:第 13 题、第 24 题、第 25 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。