Java 循环:for vs for-each —— 何时用哪个?
简洁、安全、高效——这是每个 Java 开发者对循环的追求。但for和for-each到底有什么区别什么时候该用哪一个这篇笔记帮你彻底搞懂 一、基础语法对比✅ 传统 for 循环for(初始化;条件判断;更新){// 循环体}示例int[]arr{1,2,3,4,5};for(inti0;iarr.length;i){System.out.println(arr[i]);}✅ 增强型 for 循环for-eachfor(元素类型 变量名:数组/集合){// 循环体}示例int[]arr{1,2,3,4,5};for(intnum:arr){System.out.println(num);}核心区别传统 for通过索引访问元素for-each直接获取元素值 二、关键区别详解特性传统 for 循环for-each 循环是否需要索引✅ 需要❌ 不需要能否修改原数组✅ 能❌ 不能只读副本代码简洁度较冗长极简安全性可能越界绝对安全适用场景需要索引/修改元素只需遍历元素️ 三、何时使用哪种循环实战场景✅ 场景 1只需要读取元素 →用 for-each// 计算数组总和intsum0;for(intnum:numbers){sumnum;// 只读不修改}✅ 场景 2需要知道元素位置 →用传统 for// 找到第一个负数的索引for(inti0;inumbers.length;i){if(numbers[i]0){System.out.println(第一个负数在位置: i);break;}}✅ 场景 3需要修改原数组 →用传统 for// 将所有偶数翻倍for(inti0;inumbers.length;i){if(numbers[i]%20){numbers[i]*2;// 直接修改原数组}}❌ 错误用法试图用 for-each 修改数组// 这样做是无效的for(intnum:numbers){num*2;// 只修改了副本原数组不变}⚡ 四、性能对比场景性能差异基本类型数组int[], char[]几乎无差别对象数组/集合for-each 略快避免重复调用 size()大数组100万元素差异可忽略结论优先考虑代码可读性而非微小性能差异 五、最佳实践建议✅ 优先使用 for-each 的情况遍历整个数组/集合只需要元素值不需要索引代码简洁性比灵活性更重要✅ 必须使用传统 for 的情况需要索引如打印 “第 i 个元素”需要跳过某些元素如i 2需要反向遍历需要修改原数组/集合 六、常见面试题Qfor-each 能用于 null 数组吗A不能会抛出NullPointerException。int[]arrnull;for(intx:arr){}// ❌ 报错✅ 正确做法if(arr!null){for(intx:arr){}}Qfor-each 能用于多维数组吗A可以但要注意层级int[][]matrix{{1,2},{3,4}};for(int[]row:matrix){// row 是 int[]for(intnum:row){// num 是 intSystem.out.println(num);}} 七、总结口诀“只读用 foreach要改用 for要索引用 for简洁用 foreach”需求推荐循环遍历并读取✅ for-each遍历并修改✅ 传统 for需要索引✅ 传统 for反向遍历✅ 传统 for代码简洁✅ for-each 结语掌握for和for-each的区别是写出专业、可维护 Java 代码的基础。记住没有最好的循环只有最适合的循环。下次写代码时先问自己“我需要索引吗需要修改元素吗”答案会告诉你该用哪个 附快速参考表任务代码示例遍历数组for (int x : arr)带索引遍历for (int i0; iarr.length; i)修改数组arr[i] newValue;反向遍历for (int iarr.length-1; i0; i--)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2422592.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!