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 =」が2回実行中にさまざまになり、値が「val = 493794」、「val = 675042」になるのはなぜですか?

奇妙な 2 は、なぜ「kk = 2147483647」と「val2=2147483645」なのか、なぜギャップ値は 1 ではなく 2 なのか?

私のenvは[Mac OS 64bit 10.8.3]、Eclipseは[Indigo]、jdkは[JavaSE6 MacOS default]です。

4

1 に答える 1

0

Integer.MAX_VALUE-1 を使用して、JVM バグを回避できます。

于 2013-10-23T19:03:44.223 に答える