java遍历一维数组需按需求选循环:需下标时用传统for(先判空,i

Java 遍历一维数组不是单纯“走一遍”,关键在于根据数据处理目标,选对循环结构、写清边界逻辑、避开常见陷阱。实际开发中,多数需求落在“读取+计算”“筛选+聚合”“索引依赖操作”这三类上,对应不同循环方式的天然优势。
需要下标参与运算时,用传统 for 循环
当你得知道当前是第几个元素——比如求相邻差值、做滚动平均、替换满足条件的特定位置值、或构造新数组(如把偶数下标元素提取出来),传统 for 是唯一可靠选择。
- 写法必须是
i ,而不是 <code>i :后者在空数组时虽不越界,但可读性差、易手误;前者语义清晰,且 null 判定位置统一 - 数组为 null 时,
arr.length会直接抛NullPointerException,所以务必先判空:if (arr != null) { ... } - 修改元素安全:
arr[i] = newValue完全合法;但不能改长度(数组长度不可变)
只读取值、不关心位置,优先用增强 for 循环
如果目标只是打印、累加、校验每个值是否合规、或转成字符串拼接,增强 for 更简洁、不易出错,也自动规避了越界风险。
- 语法简单:
for (int x : arr),但前提是arr不能为 null,否则运行时报NullPointerException - 必须前置判空:
if (arr != null) { for (int x : arr) { ... } },这是生产代码的硬性要求 - 不能在循环体内调用
list.remove()(那是集合),但对数组本身,它不支持原地增删,所以这点无需担心
要链式处理或统计聚合,考虑 Arrays.stream()
当任务涉及过滤(如找出所有大于平均值的数)、映射(如全部乘2)、归约(如求和、求最大值),stream 写法更声明式、可读性强。
- 示例:
int sum = Arrays.stream(arr).filter(x -> x > 0).sum(); - 注意开销:stream 创建对象、装箱拆箱(基本类型需用 IntStream 等)、短路操作不如传统循环快,大数据量或性能敏感场景慎用
- 仍需判空:
arr为 null 时,Arrays.stream(arr)直接抛异常,不能跳过
边界与异常处理是实战核心
真实业务里,数组来源常不可控(如接口返回、文件解析、用户输入),光写对循环体不够,必须覆盖空、null、长度异常等路径。
- 空数组(
arr.length == 0):三种循环都能安全执行(增强 for 和 stream 不进循环体,传统 for 条件不成立) - null 数组:所有方式都会炸,必须统一在入口处判空并给出默认行为(如返回 0、空集合、或抛业务异常)
- 避免在循环中反复调用
arr.length:JVM 会优化,但语义上它是个固定值,可提至循环外赋给局部变量提升可读性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











