int 和 Integer 有什么区别?
查看完整题解
参考回答
直接回答
int 是 32 位基本整数类型,不能为 null;Integer 是包装类,可以作为对象使用,也能表示 null。集合泛型需要引用类型,所以常见 List<Integer>,而不是 List<int>。二者可以自动装箱和拆箱,但会带来额外语义与成本。
讲清原理
把 int 交给需要 Integer 的位置,通常发生装箱;把 Integer 交给需要 int 的位置,通常发生拆箱。null 没有可拆出的整数值,所以会抛 NullPointerException。
包装对象还涉及身份比较和缓存。对于常见小整数,装箱可能复用对象,但不能依赖 == 来比较 Integer 的业务数值;既不要背“两个 Integer 永远不相等”,也不要把某次缓存实验当成所有数值的保证。对象本身占用多少堆内存也不等于 int 的 4 字节。
例子与易错点
Integer count = 3;
int value = count; // 拆箱
Integer missing = null;
System.out.println(java.util.Objects.equals(missing, count)); // false
若接着执行 int x = missing;,会抛空指针异常。对接口字段选择 Integer 时,要明确 null 表示“未提供”还是“未知”,不要让它无意间流进计算。
相关题:第 13 题、第 14 题、第 15 题。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。