int型变量的取值范围是 -2147483648 到 2147483647
当int型变量累加至最大值,继续则会突变至复数范围的最小值,进入一个死循环。
于是就有了下面的情况。
public class Main {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 2;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++) {
count++;
System.out.println(count);
}
}
}
运行结果会发现,并没有在边界值最大处停下来。而是进入了死循环。
将代码改成如下,打印输出 i 的值,然后执行六次跳出,看一下 i 值的变化
public class Main {
public static final int END = Integer.MAX_VALUE;
public static final int START = END - 2;
public static void main(String[] args) {
int count = 0;
for (int i = START; i <= END; i++) {
count++;
System.out.println(i);
if(count==6)
break;
}
}
}
运行结果如下图:
这里无限循环的原因就是当 i 累加至 Integer.MAX_VALUE 时,进入循环,然后i ++,这时i 变成了负数,,然后累加至最大值又变成零所以就一直循环下去。变成负数的原因就是int溢出了。
这里将 <=END 改成 <END 就可以解决无限循环的问题。