for循环执行顺序为四步闭环:①初始化(仅首次);②判断条件,false则退出;③条件为true时执行循环体;④执行更新语句后立即返回第②步重新判断。
Java中for循环的执行流程不是线性读一遍就完事,而是一个带“回跳”的闭环。它严格按以下四步反复运行,直到条件为false:
false,直接退出,不再进循环体true时,执行循环体常见误解是认为“更新语句执行完就自动下一轮”,其实更新之后必须再过一次条件判断,否则无法控制退出时机。比如for (int i = 0; i ,i++执行后不会直接进下一次循环体,而是先检查i 是否还成立。
在for的初始化部分声明的变量(如int i = 0),其作用域**仅限于整个for语句块内部**,包括循环条件、更新语句和循环体,但不包括for之后的代码。
for (int i = 0; i —— i在if里可用
for (int i = 0; i —— 编译失败,i不可见
int i; for (i = 0; i
for的三段表达式都不是强制要写内容的,只要两个分号在,语法就合法。但每种“留空”都有明确行为:
for (; i :初始化交给外部,适合复用已有变量for (int i = 0; ; i++):无条件表达式 → 默认为true → 无限循环,必须靠break或return退出for (int i = 0; i :没更新语句 → 若循环体不手动改i,就会卡死在第一次迭代实际开发中,省略某一部

break代替条件判断,或在循环体内做复杂更新)。盲目留空容易埋下死循环隐患。
两层for嵌套本身没问题,但性能瓶颈往往出在内层循环体里——尤其是涉及IO、对象创建、集合查找等操作时。
for (int i = 0; i —— 创建100万次对象
ArrayList预设容量;必要时考虑流式处理或并行化if (j == 0) System.out.println("i=" + i);观察外层进度真正难的不是写嵌套,而是意识到“每一次内层迭代都在被放大N倍”。写之前先心算一下总执行次数,比跑起来再看卡顿更省时间。