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