Java循环中自增变量值不符预期:为何x最终为10而非9?
为什么这段Java代码输出10而不是9?
嘿,这个问题其实是很多刚接触Java循环的开发者容易踩的小坑,我来给你拆解清楚~
首先先把你的代码贴出来,方便我们分析:
int x; for(x=1;x<10;x++); System.out.println(x);
你忽略的核心知识点:for循环的执行流程 + 空循环体的影响
我们先把for循环的执行步骤掰碎了说:
- 第一步:执行初始化语句
x=1,这一步只会在循环开始时执行一次 - 第二步:判断循环条件
x<10:- 如果条件为
true,执行循环体,然后执行迭代语句x++,再回到第二步重新判断 - 如果条件为
false,直接跳出循环,不再执行循环体和迭代语句
- 如果条件为
现在看你的代码:
- 循环体是那个单独的分号
;——这是一个空语句,意味着每次循环什么都不做,只是走完流程 - 我们一步步模拟执行:
- x初始化为1,判断1<10成立,执行空循环体,然后x变成2
- x=2,判断2<10成立,执行空循环体,x变成3
...
n. x=9,判断9<10成立,执行空循环体,x变成10
n+1. x=10,判断10<10不成立,跳出循环
- 最后执行
System.out.println(x),自然输出10
补充验证:如果去掉分号会怎样?
如果把代码改成这样(去掉循环后的分号):
int x; for(x=1;x<10;x++) System.out.println(x); System.out.println("循环结束后x的值:" + x);
这时候循环体是System.out.println(x),会输出1到9,而循环结束后x的值依然是10——这也能印证:迭代语句x++是在循环体执行完之后才会执行的,当x=9时,执行完循环体(输出9),然后x变成10,再判断条件不成立,循环结束。
内容的提问来源于stack exchange,提问作者StraDis
相关产品推荐
相关产品推荐

