指示行为不像预期

时间:2012-11-09 10:23:27

标签: java for-loop

这是我不太明白的代码:

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;退出循环而不显示任何内容。

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

3 个答案:

答案 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 < 1true