interesting!自動裝箱和拆箱是jdk1.5的新特性。jdk1.5之前,兩個Integer對象是不能直接相加的。例如Integera=newInteger(10);Integerb=newInteger(20);inta1=a.intValue();intb1=b.intValue();intsum=a1+b1;需要先調用intValue()方法轉化成int,才能實現10+20;jdk1.5之后,就不需要自己轉化intValue()這一步,jvm幫我們做了‘拆箱’。再講一下‘裝箱’:例如Longl=100L,賦值操作實際上調用了Long的valueOf方法。publicstaticLongvalueOf(longl){finalintoffset=128;if(l>=-128&&l<=127){//willcachereturnLongCache.cache[(int)l+offset];}returnnewLong(l);}------------再回到我們的問題上---------------for(longi=0;i<=Integer.MAX_VALUE;i++)sum+=i;每一次循環包括一次相加運算(拆箱)和賦值操作(裝箱)而由valueOf的源碼可知,當數值小于128的時候,valueOf方法返回同一對象;當大于127的時候,valueOf方法是返回了新的Long對象共計(2的31次方-128)次,幾乎等于每一次循環都新創建了一個Long對象,