下面的程序计算了一个循环的迭代次数,并且在循环中止时候打印了这个计数值,那么,他打印的是什么呢?
public class InTheLoop{
public static final int END = Integer.MAX_VALUE
public static final int START = END-100;
public static void main(String[] args{
int count = 0;
for(int i=START;i<=END;i++){
count++;
}
System.out.println(count);
}
}
这个循环看循环条件,会输出101,但实际上,这是一个无限循环。
问题在于这个循环会在循环索引(i)小于或等于Integer。MAX_VALUE时候持续运行,但是所有的int都小于或者等于Integer.MAX_VALUE,当i达到Integer.MAX_VALUE后,并且再次执行增量操作,就又绕回到Integer.MIN_VALUE。
如果需要循环到int数值的边界附近,最好使用一个long变量类型作为循环索引。
无论你在何时使用了一个整数类型,都要意识到其边界条件。
如果清晰性和简洁性占据了及其重要的地位,那么在这种情况下使用一个long类型的循环索引几乎总是最佳方案,但是有一个例外,如果你在所有的int数值上迭代,那么使用int类型的循环索引的速度大概可以提高一倍。