interesting!自動裝箱和拆箱是jdk1.5的新特性。jdk1.5之前,兩個Integer對象是不能直接相加的。例如Integera=newInteger(10);Integerb=newInteger(20);inta1=a.intValue();intb1=b.intValue();intsum=a1+b1;需要先調(diào)用intValue()方法轉(zhuǎn)化成int,才能實現(xiàn)10+20;jdk1.5之后,就不需要自己轉(zhuǎn)化intValue()這一步,jvm幫我們做了‘拆箱’。再講一下‘裝箱’:例如Longl=100L,賦值操作實際上調(diào)用了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;每一次循環(huán)包括一次相加運算(拆箱)和賦值操作(裝箱)而由valueOf的源碼可知,當(dāng)數(shù)值小于128的時候,valueOf方法返回同一對象;當(dāng)大于127的時候,valueOf方法是返回了新的Long對象共計(2的31次方-128)次,幾乎等于每一次循環(huán)都新創(chuàng)建了一個Long對象,