第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

跪求!effective java item6 避免創(chuàng)建不必要的對(duì)象十分感謝

跪求!effective java item6 避免創(chuàng)建不必要的對(duì)象十分感謝

慕勒3428872 2019-09-09 21:43:51
在《effectivejava》中‘避免創(chuàng)建不必要的對(duì)象’一節(jié),有如下代碼privatestaticlongsum(){Longsum=0L;for(longi=0;i
查看完整描述

2 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

0,不知道這本書的序言你看了沒有,若你看了就應(yīng)該知道它不適合初學(xué)者,否則你也不會(huì)有這樣的問題了1,對(duì)于你所提的問題,像這樣直接給包裝類型賦值,jvm在執(zhí)行時(shí)相當(dāng)于調(diào)用該包裝類的valueof方法,對(duì)于Long的valueof方法java.lang.Long#valueOf(long),如果i不在longcache中,那么就newLong(i)一個(gè)新對(duì)象,顯然上述代碼中,在sum幾次遍歷后大于127就會(huì)創(chuàng)建新的實(shí)例,至于為什么有l(wèi)ongcache,你可以理解為幫機(jī)器節(jié)省內(nèi)存(畢竟這些類上世紀(jì)就已經(jīng)設(shè)計(jì)出來了,那時(shí)的機(jī)器內(nèi)存可沒有現(xiàn)在這么多)
                            
查看完整回答
反對(duì) 回復(fù) 2019-09-09
?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

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){//willcache
returnLongCache.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ì)象,
                            
查看完整回答
反對(duì) 回復(fù) 2019-09-09
  • 2 回答
  • 0 關(guān)注
  • 389 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)