优先用基本类型提升性能,仅在集合、泛型、null支持、序列化等场景用包装类;注意包装类的null风险、缓存陷阱及判等需用equals。

选基本类型还是包装类,关键看场景:要性能、存值、做计算,就用 int、double 这类;要放进集合、支持 null、参与泛型或序列化,才用 Integer、Double 这类包装类。
高频计算和循环里优先用基本类型
基本类型直接存值,没有对象头开销,栈上访问快;包装类是堆对象,每次自动装箱/拆箱都可能新建对象,拖慢速度。比如百万次累加,int sum 比 Integer sum 快 3–5 倍。
- 数值运算、数组索引、条件判断中一律用基本类型
- 避免在 for 循环内写
Integer i = 0; i ,改用 <code>int i = 0 - 原始类型数组(如
int[])比List<integer></integer>内存占用少 3–5 倍
集合、泛型、Map 键值必须用包装类
Java 集合框架(ArrayList、HashMap 等)底层基于 Object[] 或引用节点设计,不接受基本类型。所以 List<int></int> 编译不通过,必须用 List<integer></integer>。
-
Map<string integer></string>中的Integer可为 null,适合表示“未设置”状态 - 泛型方法参数、返回值、接口定义(如
<t extends number></t>)依赖包装类继承体系 - JSON 序列化、RPC 传输等框架通常只识别对象,基本类型需包装后才能处理
注意 null 和缓存陷阱
包装类可为 null,但容易引发空指针;同时小范围值(如 -128 到 127 的 Integer)有缓存,超出则每次 new 新对象——这会影响 == 判断和内存使用。
- 判等统一用
.equals(),别用==比较包装类(除非确认在缓存范围内且想比地址) - 显式创建对象时用
Integer.valueOf(127),不用new Integer(127) - 成员变量若需表达“未初始化”,用
Integer height;若默认 0 就合理,用int height
需要额外能力时再选包装类
包装类提供实用静态方法,比如字符串转数字、进制转换、比较逻辑等,基本类型做不到。
-
Integer.parseInt("123")、Double.parseDouble("3.14") -
Integer.bitCount(15)、Long.highestOneBit(24) -
Character.isLetter('a')、Boolean.parseBoolean("true")
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











