0

0

Java for 循环的经典三部分写法与执行顺序详解

冷漠man

冷漠man

发布时间:2026-03-18 13:24:43

|

237人浏览过

|

来源于php中文网

原创

for循环三部分执行顺序为:①初始化语句(如int i=0)仅执行一次;②每次循环前先判断条件;③每次循环体执行完后执行迭代语句。

java for 循环的经典三部分写法与执行顺序详解

for 循环的三部分到底谁先执行、谁管谁

初始化语句(int i = 0)只在循环开始前执行一次;条件判断(i )在每次进入循环体前检查;更新表达式(<code>i++)在本次循环体执行完后、下一次条件判断前执行。很多人误以为更新表达式在循环体之前运行,结果写出死循环或漏掉最后一次迭代。

常见错误现象:for (int i = 0; i —— 这里 <code>ii == 2 时被手动加了 1,接着又执行 i++,导致跳过 3,输出 0 1 2 4

  • 初始化语句可为空(如 int i = 0 已在外层声明),但分号不能少: for (; i
  • 条件表达式为空等价于 true,必须靠循环体内 breakreturn 退出,否则死循环
  • 更新表达式也可为空,适合在循环体内用复杂逻辑控制变量变化

for 循环中修改循环变量容易踩的坑

在循环体内直接赋值修改循环变量(比如 i = 5),会覆盖更新表达式的值,且下次仍按新值继续判断。这不是 bug,是设计如此,但常被当成“意外行为”。

使用场景:需要跳过若干元素、或根据条件提前加速遍历(如字符串匹配中的 KMP 预处理)。

立即学习Java免费学习笔记(深入)”;

性能影响:纯赋值无额外开销,但会让逻辑变难读,IDE 通常不会警告,出问题后调试成本高。

Buildt.ai
Buildt.ai

AI驱动的软件开发平台,可以自动生成代码片段、代码分析及其他自动化任务

下载
  • 避免在循环体里混用 i++i += 2,除非你明确知道每轮结束时 i 的确切值
  • 如果要重置计数器,优先考虑提取为独立方法,或改用 while 显式控制流程
  • 注意作用域:for (int i = 0; ...) 中的 i 在循环结束后不可访问;而 int i; for (i = 0; ...) 则可以

增强 for 循环(for-each)和传统 for 的关键区别

增强 for 循环本质是语法糖,底层调用 Iterator 或数组索引访问,它不暴露索引变量,也不允许在遍历时修改集合结构(否则抛 ConcurrentModificationException)。

错误现象:for (String s : list) { list.remove(s); } —— 直接报错;想边遍历边删,得用 Iterator.remove() 或倒序传统 for。

  • 数组可用增强 for,但无法获取当前索引,需要额外计数器变量
  • 集合类若重写了 iterator() 但没保证 fail-fast 行为,增强 for 可能不报错但结果不可预期
  • 性能上,对 ArrayList,传统 for 随机访问快;对 LinkedList,增强 for 的迭代器更快(避免反复从头找节点)

for 循环嵌套时变量命名与作用域陷阱

外层 for (int i = 0; ...) 和内层 for (int i = 0; ...) 在 Java 中编译不通过:同作用域重复声明变量。但若外层用 int i,内层用 int j,就安全。

容易被忽略的地方:嵌套三层以上时,用 i/j/k 还行,四层开始极易搞混哪层控制哪维数据,尤其处理多维数组或树形结构。

  • 别为了省变量名复用 i:比如外层 for (int i = 0; ...),内层写成 for (i = 0; ...)(省略声明)—— 看似省事,实则破坏隔离性,外层循环可能被内层意外改写
  • 涉及异步或 lambda 引用循环变量时,传统 for 的局部变量每次迭代都是新绑定;而增强 for 的变量每次迭代也重新声明,相对安全
  • 如果循环体很长,建议把内层逻辑抽成方法,参数传入当前索引或元素,比层层缩进更易维护

最麻烦的不是语法记不住,而是调试时发现循环变量在某次迭代后突然“跳变”,却查不出是哪行代码动了它——这时候要立刻检查所有对循环变量的赋值点,包括看似无关的工具方法调用。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1091

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

848

2023.08.22

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

108

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

120

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

262

2025.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1571

2023.10.24

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

7

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.6万人学习

Java 教程
Java 教程

共578课时 | 84.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号