1

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

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”,为什么gap值是2,而不是1?

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

4

1 回答 1

0

You can work around the JVM bug by using Integer.MAX_VALUE-1

于 2013-10-23T19:03:44.223 回答