publicclassTest {publicstaticvoidmain(String[] args){Integer a =newInteger(129);Integer b =newInteger(129);// 1System.out.println(a == b);Integer c =newInteger(127);Integer d =newInteger(127);// 2System.out.println(c == d); }}
privatestaticclassIntegerCache {staticfinalint low =-128;staticfinalint high;staticfinalInteger cache[];static {// high value may be configured by propertyint h =127;String integerCacheHighPropValue =sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if (integerCacheHighPropValue !=null) {try {int i =parseInt(integerCacheHighPropValue); i =Math.max(i,127);// Maximum array size is Integer.MAX_VALUE h =Math.min(i,Integer.MAX_VALUE- (-low) -1); } catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it. } } high = h; cache =newInteger[(high - low) +1];int j = low;for(int k =0; k <cache.length; k++) cache[k] =newInteger(j++);// range [-128, 127] must be interned (JLS7 5.1.7)assertIntegerCache.high>=127; }privateIntegerCache() {} }