0

这是我不太明白的代码:

for(int i = 0; i < (i = 1); i++)
            System.out.println("FOR " + i);

我希望这段代码不会显示任何内容,而是一次输出“FOR”。

我在想 i < (i=1) 应该将 i 的值与赋值 i=1 的结果进行比较,即 1 -> 所以 1<1 是错误的 -> 退出循环而不显示任何内容。

也许这种比较的方式与我理解的不同。谢谢!

4

3 回答 3

2
i < (i = 1)

这将被评估为: -

0 < (i = 1)  -->   0 < 1  --> true, so for loop executes

在下一次运行时,wheni++被执行并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 上表达式的值。

于 2012-11-09T10:26:08.270 回答
0

不,你是真的。

i < (i = 1) 是问题,因为赋值 (i = 1) 是一个布尔等式为 true: 1

于 2012-11-09T10:26:08.130 回答
0

我在想 i < (i=1) 应该将 i 的值与赋值 i=1 的结果进行比较,即 1

是的,它将它与您的期望进行比较。但是你初始化int i = 0,从而拥有0 < 1了 which is true

于 2012-11-09T10:27:11.287 回答