带有Integer.MAX_VALUE的java循环

时间:2013-07-01 07:24:06

标签: java integer long-integer

我偶然发现了这些奇怪的代码,我不知道为什么?

public class CrazyTest {

    public static void main(String[] args) {

        long val = 0L;
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            val = i;
        }
        System.out.println("val = "+val);

        int kk =Integer.MAX_VALUE;
        System.out.println("kk = "+kk);

        long val2 = 0L;
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            val2 = i;
        }
        System.out.println("val2 = "+val2);
    }
}

奇怪的1是“val =”将是多种多样的,而你运行两次,值是 “val = 493794”,“val = 675042”为什么?

奇怪的2是为什么“kk = 2147483647”和“val2 = 2147483645”,为什么间隙值是2,而不是1?

我的环境是[Mac OS 64bit 10.8.3],eclipse是[Indigo],而jdk是[JavaSE6 MacOS默认]

1 个答案:

答案 0 :(得分:0)

您可以使用Integer.MAX_VALUE-1

解决JVM错误