为什么这个无限循环会聚?

Vil*_*ipe 2 java math

为什么Java中的代码输出值-210时,它是无限循环?

当整数达到最大值时,此循环是否结束?

public static void main(String[] args)
{
    int a=100;
    int b=110;
    int c=0;
    while(a>=100 && b<=110) {
        a=a+1;
        b=b-1;
        c=a-b;
    }
    System.out.println(c);
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

由于整数溢出,此循环终止.当a达到int的最大值时,递增它使其为负.当b达到int的最小值时,递减它会使它成为一个大的正值.一旦其中一个溢出,循环就会终止.

由于该初始值,a将第一溢出,因为二者都初始化为正值,所以a更接近于Integer.MAX_VALUEbInteger.MIN_VALUE.

至于为何输出呢-210:

a增加(Integer.MAX_VALUE-100)+1次数直到循环终止
b减少相同的次数.

决赛aInteger.MIN_VALUE(由于溢出)
决赛b110 - ((Integer.MAX_VALUE-100)+1) = 110 - ((-Integer.MIN_VALUE-1-100)+1) = Integer.MIN_VALUE + 210

因此,a-b最终成为Integer.MIN_VALUE - (Integer.MIN_VALUE + 210) = -210