本文转载自微信公众号“Java中文社区”,作者雷哥。转载本文请联系Java中文社区公众号。代码测试publicclassIntegerTest{publicstaticvoidmain(String[]args){Integeri1=127;Integeri2=127;System.out.println(i1==i2);Integeri3=128;Integeri4=128;System.out.println(i3==i4);}}上面代码的执行结果为:truefalse首先,当我们将上面的测试代码编译成字节码(.class)时,编码后的代码如下:publicclassIntegerTest{publicstaticvoidmain(String[]paramArrayOfString){Integerinteger1=Integer.valueOf(127);Integerinteger2=Integer.valueOf(127);System.out.println((integer1==integer2));Integerinteger3=Integer.valueOf(128);Integerinteger4=Integer.valueOf(128);System.out.println((integer3==integer4));}}可见在创建Integer时使用了valueOf,其实现源码如下:publicstaticIntegervalueOf(inti){if(i>=IntegerCache.low&&i<=IntegerCache.high)returnIntegerCache.cache[i+(-IntegerCache.low)];returnnewInteger(i);}从上面的源码可以看出,该方法中使用了IntegerCache。IntegerCache的源码如下:privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//highvaluemaybeconfiguredbypropertyinth=127;StringintegerCacheHighPropValue=sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if(integerCacheHighPropValue!=null){try{inti=parseInt(integerCacheHighPropValue);i=Math.max(i,127);//最大数组大小为Integer.MAX_VALUEh=Math.min(i,Integer.MAX_VALUE-(-low)-1);}catch(NumberFormatExceptionnfe){//如果属性不能解析成an??int,忽略它。}}high=h;cache=newInteger[(high-low)+1];intj=low;for(intk=0;k
