这是我不太明白的代码:
for(int i = 0; i < (i = 1); i++)
System.out.println("FOR " + i);
我希望这段代码不会显示任何内容,而是输出'FOR'一次。
我在想我&lt; (i = 1)应该将i的值与赋值i = 1的结果进行比较,该值是1 - > 1。所以1 <1是假的 - &gt;退出循环而不显示任何内容。
这种比较的方式可能与我理解的不同。谢谢!
答案 0 :(得分:2)
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.
所以,对于循环退出。
注意: - 在condition part (i < (i = 1))
中,在分配(i = 1)之前,LHS已被评估为0,并存储在内存中。因此,它将保持为0.它完全取决于评估顺序。因此,赋值i = 1
不会影响LHS上表达式的值。
答案 1 :(得分:0)
不,你是真的。
我&lt; (i = 1)是问题,因为赋值(i = 1)是一个布尔值为true:1
答案 2 :(得分:0)
我在想我&lt; (i = 1)应该将i的值与赋值的结果i = 1(1
)进行比较
是的,它将它与您期望的相比较。但是,您初始化int i = 0
,因此0 < 1
为true
。