让我们看一下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 。为什么会这样?
答案 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
值结束