如果Java中提供了偶数,为什么应该是无限的while循环会终止

如果Java中提供了偶数,为什么应该是无限的while循环会终止,java,Java,好的,这是我的问题。当我使用5初始化x时,while循环不会终止,但使用偶数(如6初始化它)会终止循环: int x = 6; while(x != 0){ x = x + 2; } 令我惊讶的是,尽管我认为它不会终止。但是,以下类似的循环,x循环的奇数值为无限: int x = 5 while(x != 0){ x += 2; } 这似乎只发生在Java中的而循环中,因为我在for循环中并没有得到类似的结果。请帮我解释一下,因为我现在很困惑。谢谢整数溢出在214748364

好的,这是我的问题。当我使用
5
初始化
x
时,while循环不会终止,但使用偶数(如
6
初始化它)会终止循环:

int x = 6;
while(x != 0){
    x = x + 2;
}
令我惊讶的是,尽管我认为它不会终止。但是,以下类似的循环,x循环的奇数值为无限:

int x = 5
while(x != 0){
    x += 2;
}

这似乎只发生在Java中的
循环中,因为我在
for
循环中并没有得到类似的结果。请帮我解释一下,因为我现在很困惑。谢谢

整数溢出在2147483647,如果您添加1,它将转到-2147483648。所以当你们从偶数开始,你们会再次回到零。但当你从奇数开始时,你永远不会回到零。

这里没有深入讨论,但这是因为溢出。整数是32位的,所以它是有限数量的数字。由于它的签名,这意味着数字的范围从−2.147.483.648至2.147.483.647。所以在这个例子中:2.147.483.647+1=-2.147.483.648是一个溢出

这意味着如果你的while循环中有x+1,那么它将永远终止。因为一旦达到0,while循环条件就会中断。如果你加上2,这似乎是可行的,因为数字x在某一点上达到了0


希望这对伴侣有帮助。

你可以在普通的12小时挂钟上看到同样的效果。选择任何时间。在你达到12岁之前,再加上两个小时

你会注意到,如果你从一个偶数小时开始,你总是会停下来。例如,6:

6 + 2  = 8
8 + 2  = 10
10 + 2 = 12  // stop
然而,如果你从奇数小时开始,你永远不会停止。例如:

5 + 2  = 7
7 + 2  = 9
9 + 2  = 11
11 + 2 = 1
1 + 2  = 3
3 + 2  = 5
5 + 2  = 7
...
Java
int
的工作方式相同,但它的值不是12小时,而是2^32=4294967296。它不是从12包装到1,而是从2147483647包装到-2147483648


请注意,
for
循环的行为方式是相同的:
for(intx=6;x!=0;x+=2){}
确实会停止,而
x=5
不会停止。

整数溢出。在这种情况下,整数溢出和java不会引发异常。。。同样的情况也应该发生在
for
循环中(假设相同的起始值、条件和增量)1)溢出没有异常或错误;2) 添加2并从偶数开始(以达到零)