java中包装类(如integer)与基本类型(如int)本质不同:前者是对象,支持集合、泛型、null值及丰富方法;后者是纯数值,轻量高效但无法用于泛型或表达缺失状态,比较需用equals避免缓存陷阱。

Java 中包装类(如 Integer)和基本类型(如 int)本质不同:一个是对象,一个是纯数值。它们不是“可互换的两种写法”,而是为解决不同问题而设计的两类机制。
能放集合和泛型,基本类型做不到
Java 的集合框架(如 List、Map)和泛型只接受引用类型。因为泛型在编译后会擦除为 Object,而 int 不是 Object 的子类。
-
List<int></int>编译直接报错 -
List<integer></integer>合法,可以存取数值对象 - 函数式接口如
Function<integer string></integer>也依赖包装类
null 值表达“缺失”状态
基本类型必须有确定值——int 默认是 0,boolean 默认是 false,无法区分“没设置”和“设为零”。
-
Integer age = null明确表示“年龄未知/未提供” - POJO、DTO、数据库映射字段常用
Integer接收可能为 NULL 的整型列 -
int强制初始化,容易掩盖业务逻辑中的空值语义
比较方式和缓存机制要特别注意
用 == 比较两个 Integer,结果可能出人意料——它比的是引用地址,不是数值。
-
Integer a = 100, b = 100;→a == b是true(在 -128 到 127 范围内,复用缓存对象) -
Integer c = 200, d = 200;→c == d是false(超出缓存范围,新建对象) - 安全做法:统一用
.equals()或先拆箱再用==
功能丰富但有性能代价
包装类是真正的类,提供大量实用方法;基本类型则轻量高效,无额外开销。
-
Integer.parseInt("123")、Integer.toHexString(255)、Character.isLetter('a')都依赖包装类 - 循环中频繁自动装箱(如
for (int i = 0; i )会创建大量临时对象,加重 GC 压力 - 高性能计算、数组密集操作优先用
int[]而非List<integer></integer>
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











