为什么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_VALUE比b是Integer.MIN_VALUE.
至于为何输出呢-210:
a增加(Integer.MAX_VALUE-100)+1次数直到循环终止
b减少相同的次数.
决赛a是Integer.MIN_VALUE(由于溢出)
决赛b是110 - ((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