使用原始类型(如int、boolean)而非包装类型(如integer、boolean)可显著提升java性能,避免装箱/拆箱开销、空指针风险及冗余null检查,并支持jdk 23+的instanceof原始类型语法和jit优化。

直接用 int、boolean、double 这类原始类型,而不是 Integer、Boolean、Double,是提升 Java 代码执行效率最基础也最有效的手段之一。它能绕过装箱/拆箱开销,避免空指针风险,还能让 instanceof 判断更简洁安全。
避免无谓的装箱与拆箱
每次把 int 转成 Integer(装箱),或把 Integer 转回 int(拆箱),JVM 都要分配对象、触发 GC、做 null 检查。高频场景下这些操作会明显拖慢性能。
- 循环计数、方法参数、局部计算尽量用原始类型
- 集合中确实需要泛型时,优先考虑
IntStream、LongStream等原始流,而非Stream<integer></integer> - 避免在
for-each中对包装类型集合做数值运算,例如for (Integer x : list) sum += x;—— 改用索引遍历或原始数组
善用 JDK 23+ 的 instanceof 原始类型判断
JDK 23 开始支持 obj instanceof int i 这类语法,既完成类型检查,又自动完成安全拆箱并绑定变量,彻底规避 ClassCastException 和 NullPointerException。
- 处理 JSON 解析结果、反射返回值、通用回调参数时特别实用
- 替代冗长写法:
if (obj instanceof Integer) { int i = ((Integer) obj).intValue(); ... } - 支持全部 8 种原始类型:
boolean、byte、short、int、long、float、double、char
配合 final 与局部变量进一步提效
原始类型本身轻量,再叠加编译器优化机制,效果更明显。
- 方法参数或局部变量声明为
final int count,有助于 JIT 编译器内联和常量传播 - 把原始类型变量定义在方法内(栈上分配),避免堆内存分配和 GC 压力
- 循环中避免重复调用返回原始类型的 getter,例如
for (int i = 0; i → 提前缓存 <code>int len = list.size()
注意边界:何时仍需包装类型
原始类型不能为 null,也不能用于泛型类型参数,所以并非所有场景都能替换。
- 集合类(
List<integer></integer>、Map<string boolean></string>)必须用包装类型 - 需要表达“未赋值”语义时(如数据库字段可能为空),
Integer比int更合适 - 使用 Optional 或 Spring 的 @Nullable 注解时,包装类型语义更清晰
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











