大批量数值计算应优先使用基本类型,避免包装类引发的自动拆箱/装箱开销和GC压力;计算密集型循环中须用int等基本类型,如int sum = 0; for (int i = 0; i < n; i++) sum += arr[i];

大批量数值计算时,优先用基本类型,包装类只在必要场景下出现——不是不能用,而是用了容易掉进性能坑里。
计算密集型循环必须用基本类型
循环中反复做加减乘除、累加求和等操作,基本类型直接在栈上运算,没有对象创建和GC压力。包装类每次参与运算都会触发自动拆箱(取值)和可能的装箱(存回),带来显著开销。
- ✅ 推荐写法:int sum = 0; for (int i = 0; i
- ❌ 避免写法:Integer sum = 0; for (int i = 0; i (每次
+=都隐含拆箱+装箱) - 实测数据:相同逻辑下,
long比Long快近10倍(耗时1.6s vs 15.2s)
集合暂存中间结果再转回基本类型处理
如果计算流程需要“先收集、后处理”(比如读取一批数进List再统计),可借助包装类完成存储,但关键计算阶段要尽快转成基本类型数组或流式处理。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 先存:用
List<integer></integer>接收原始输入(如从文件、DB、HTTP) - 再转:用
list.stream().mapToInt(Integer::intValue).toArray()转为int[] - 后算:对数组做纯基本类型循环,避免任何包装类参与运算路径
警惕隐式拆箱引发的空指针
即使少量使用包装类,只要涉及解包(如int x = wrapperValue;),就必须确认它不为null。大批量数据中一个null就可能导致整个批次失败。
立即学习“Java免费学习笔记(深入)”;
- 不要写:
int value = list.get(i);(若list含null会立即抛NullPointerException) - 安全写法:
Integer wrapper = list.get(i); int value = wrapper != null ? wrapper : 0; - 更稳妥:用
Optional.ofNullable(wrapper).orElse(0)封装默认逻辑
能用原始类型集合库就不用标准集合
当纯数值计算占主导且数据量大,考虑引入fastutil、trove或Eclipse Collections等支持原始类型泛型的集合库。
- 例如:
IntArrayList直接存int,无装箱;IntStream原生支持并行计算 - 对比:
ArrayList<integer></integer>每个元素都是堆上对象,内存占用多3–4倍,缓存不友好 - 适用场景:科学计算、实时日志聚合、高频交易数值处理等

















