【发布时间】:2015-07-28 00:42:29
【问题描述】:
最近遇到了这个问题
int i = 10;
while (i++ <= 10) {
i++;
}
System.out.print(i);
答案是 13 ,请解释一下 13 是怎么回事?
【问题讨论】:
-
你认为答案应该是什么,为什么?
-
后增量运算符应用 after(或“post”)它出现的表达式;但在评估任何其他表达式之前。
-
这很棘手。您可能期望答案是 12。为什么?因为关系条件评估和循环分支可能被认为是原子的。显然不是,但这不是一个不合理的假设。很难想象Java“存储”了增量操作并在之后评估了关系条件,但在分支出循环之前“插入”了它。我想知道由此产生的代码在汇编程序/机器语言级别是什么样的。
-
相反,这可以归结为将关系条件的评估存储在布尔值(位/字节?)中,执行增量操作,然后对存储的布尔值执行分支如果操作。
标签: java loops while-loop