You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两段Java for循环代码输出12345而非01234?

为什么这两段Java for循环输出是12345而非期望的01234?

期望输出:01234

两段问题代码:
第一段:

for(int i = 0;i < 5; i++, System.out.print(i));

第二段:

for(int i = 0;i < 5; System.out.print(i))
    i++;

实际输出:12345


核心原因:没搞懂Java for循环的执行顺序

Java的for循环严格遵循以下执行流程:

  1. 仅执行一次初始化表达式(比如int i = 0)
  2. 计算条件判断表达式(比如i < 5):结果为true则进入循环体,为false直接结束循环
  3. 执行完循环体后,执行所有更新表达式(for循环第三个分号后的代码)
  4. 回到步骤2,重复判断逻辑

拆解第一段代码的执行过程

这段代码的循环体是空语句(末尾的分号),每一轮执行逻辑:

  • 初始化i=0
  • 判断0 < 5为true,执行空循环体(无任何操作)
  • 执行更新表达式:先i++(i变为1),再执行System.out.print(i),输出1
  • 判断1 < 5为true,空循环体
  • 更新:i++到2,输出2
  • 以此类推,直到i=4时:
    • 判断4 <5为true,空循环体
    • 更新:i++到5,输出5
  • 最后判断5 <5为false,循环结束

拆解第二段代码的执行过程

这段代码把打印操作放到了更新表达式位置,循环体是i++,每一轮执行逻辑:

  • 初始化i=0
  • 判断0 <5为true,执行循环体i++(i变为1)
  • 执行更新表达式System.out.print(i),输出1
  • 判断1 <5为true,循环体i++到2,更新输出2
  • 以此类推,直到i=4时:
    • 判断4 <5为true,循环体i++到5,更新输出5
  • 判断5 <5为false,循环结束

修正方案(得到期望的01234)

把打印操作放到循环体中,让每次判断通过后先打印初始值,再执行自增:

for(int i = 0;i <5; i++){
    System.out.print(i);
}

内容的提问来源于stack exchange,提问作者Gar1s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:50:26