这是我不太明白的代码:
for(int i = 0; i < (i = 1); i++)
System.out.println("FOR " + i);
我希望这段代码不会显示任何内容,但它却输出“FOR”一次。
我认为 i < (i=1) 应该将 i 的值与赋值 i=1 的结果进行比较,即 1 -> 所以 1<1 这是 false -> 退出循环而不显示任何内容。
也许这种比较的方式与我理解的不同。谢谢!
最佳答案
i < (i = 1)
这将被评估为:-
0 < (i = 1) --> 0 < 1 --> true, so for loop executes
下次运行时,i++
被执行并且 i
变成2
(因为,i
是来自上一次循环运行的 1
赋值的 (i = 1)
。)
所以,i < (i = 1)
评估为:-
2 < 1 --> false.
因此,for 循环退出。
注意:- 在您的 condition part (i < (i = 1))
中,在赋值(i = 1)发生之前,LHS 已被评估为 0,并存储在内存中。因此,它将保持为 0。这完全取决于评估的顺序。所以作业i = 1
不会影响LHS上的表达值。
关于java - 指令表现不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306209/