写好java循环的关键是稳、快、少错:缓存size/length、避免循环内耗时调用、优先用增强for遍历。

Java 中写好循环,关键不在“会不会”,而在“怎么写更稳、更快、更少出错”。多数性能瓶颈和逻辑 bug 都藏在循环里——比如反复调用 list.size()、在循环内拼接字符串、嵌套过深却没优化顺序。下面这些技巧,都是从真实项目中沉淀下来的实用做法。
避免循环内重复计算和方法调用
每次迭代都重新获取集合长度或调用 getter 方法,看似无害,但在大数据量下会明显拖慢速度。
- 把
list.size()、array.length提前缓存为局部变量,尤其在 for 循环中 - 循环体内不调用可能产生副作用或耗时的方法(如数据库查询、远程接口)
- 像
System.currentTimeMillis()这类时间戳,如果只需一次,就别放在循环里反复取
优先使用增强 for 循环遍历集合与数组
只要不需要索引、不修改原集合元素、不反向遍历,增强 for(for-each)就是更安全简洁的选择。
- 自动处理边界,杜绝
ArrayIndexOutOfBoundsException - 代码更接近自然语义,例如
for (String name : names)比for (int i = 0; i 更易读 - 注意:不能在遍历时直接用
=赋值修改数组/集合中的对象引用;若需修改内容,仍要用传统 for + 索引
字符串拼接务必用 StringBuilder
在循环中用 += 拼接字符串,每轮都会新建 String 对象,触发频繁 GC。
- 初始化
StringBuilder时预估容量(如new StringBuilder(1024)),减少扩容开销 - 循环结束后统一调用
toString(),不要在循环内反复调用 - 简单场景(如拼接 2~3 个固定字符串)可忽略,但凡涉及几十次以上拼接,必须切换
嵌套循环注意内外层顺序与提前终止
两层循环的性能差异,常取决于哪一层更“轻”、哪一层更“重”。
- 把迭代次数少的循环放外层,次数多的放内层,能减少外层变量初始化和条件判断的总次数
- 一旦找到目标结果(如查找匹配项),立刻用
break或带标签的break跳出,别硬跑完全部 - 用
continue跳过无效数据,比在循环体里堆 if-else 更清晰
高效循环不是追求炫技,而是让每次迭代都真正必要、每次操作都足够轻量。把这些细节养成习惯,代码质量会明显提升。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











