用-D可以设置java.lang.Integer.IntegerCache.high,将上限设置大于127,但是当我把它置为小于127(比如20),
然后
Integer a = 10;
Integer b = 10;
System.out.println(a == b);
打出false
不知为何

解决方案 »

  1.   

    小于127没效果。
    static {
                // high value may be configured by property
                int h = 127;
                String integerCacheHighPropValue =
                    sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
                if (integerCacheHighPropValue != null) {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low));
                }
                high = h;            cache = new Integer[(high - low) + 1];
                int j = low;
                for(int k = 0; k < cache.length; k++)
                    cache[k] = new Integer(j++);
            }
      

  2.   

    就算没效果,我那个例子不应该还是返回true吗?因为上界一定会大于等于127的,所以一定在Cache中
      

  3.   

    -Djava.lang.Integer.IntegerCache.high=20java version "1.7.0"
    Java(TM) SE Runtime Environment (build 1.7.0-b147)
    Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode, sharing)java version "1.6.0_27"
    Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
    Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)java version "1.6.0_26"
    Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
    Oracle JRockit(R) (build R28.1.4-7-144370-1.6.0_26-20110617-2130-linux-ia32, compiled mode)java version "1.6.0"
    Java(TM) SE Runtime Environment (build pxi3260sr9fp2-20110625_01(SR9 FP2))
    IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260sr9-20110624_85526 (JIT enabled, AOT enabled)
    J9VM - 20110624_085526
    JIT  - r9_20101028_17488ifx17
    GC   - 20101027_AA)
    JCL  - 20110530_01都是返回 true
      

  4.   

    囧了,之前估计是忘记重新编译了,NND~~~谢了