Java中令人困惑的while循环

时间:2011-11-13 20:37:14

标签: java

让我们看一下Java的日常例子。

package loop;

final public class Main 
{
    public static void main(String[] args) 
    {
         long temp=1000000000;

        while(temp--!=0)
        {
            temp-=temp++;
            System.out.println("Inside loop = "+temp);
        }
        System.out.println("Outside loop = "+temp);
    }
}

在上面的简单代码中, while 循环只迭代一次,但 long 类型的局部变量 temp 包含一个较大的值 1000000000


通过语句System.out.println("Inside loop = "+temp);,它显示 Inside loop = 0 ,并通过此语句System.out.println("Outside loop = "+temp);显示外部循环= -1 。为什么会这样?

5 个答案:

答案 0 :(得分:4)

因为当它最后一次点击while循环时,它会执行temp -

ie .... temp == 0,因此它将退出while循环,并在比较后执行 -

后期增量/减量的乐趣。

答案 1 :(得分:2)

temp--检查内容然后降低值

所以如果temp == 0

temp--!=0返回false,因为temp == 0;但在比较温度降低到-1之后直接

如果您将while循环更改为

while (--temp!=0)

然后你会发现循环内外都有相同的值

编辑 - (我错过了一个关于为什么一个循环的内容)

temp-=temp++;

这是通过临时减少温度,写得更长

temp = temp - (temp++);

因为在读取其值后执行评估,所以最终变为

temp = temp - temp;

或消除

temp = 0;

我不确定在右侧有一个相同变量的递增器的赋值的定义行为,但是从你得到的结果的解释我会假设左手赋值优先于右边手边。这可能会进入未定义的领域,绝对应该避免。

答案 2 :(得分:1)

评估while(temp--!=0)后,它会将变量temp减一。简单地说:在评估过程中,它将为零,但只要变量被使用,它就会减少。

答案 3 :(得分:1)

系统从外循环打印println之前的最后一个操作是temp - != 0,所以你将值递减到-1。

答案 4 :(得分:1)

在这一行:

temp-=temp++;

你使temp为零,然后在这一行:

while(temp--!=0)

测试返回false并且循环存在,但是正确退出,temp最后一次递减,以-1值结束