这是我不太明白的代码:
for(int i = 0; i < (i = 1); i++)
System.out.println("FOR " + i);
我希望这段代码不会显示任何内容,而是一次输出“FOR”。
我在想 i < (i=1) 应该将 i 的值与赋值 i=1 的结果进行比较,即 1 -> 所以 1<1 是错误的 -> 退出循环而不显示任何内容。
也许这种比较的方式与我理解的不同。谢谢!
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 上表达式的值。
不,你是真的。
i < (i = 1) 是问题,因为赋值 (i = 1) 是一个布尔等式为 true: 1
我在想 i < (i=1) 应该将 i 的值与赋值 i=1 的结果进行比较,即 1
是的,它将它与您的期望进行比较。但是你初始化int i = 0
,从而拥有0 < 1
了 which is true
。