Java學(xué)習(xí)之自動(dòng)裝箱和自動(dòng)拆箱源碼分析-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第1頁(yè)
Java學(xué)習(xí)之自動(dòng)裝箱和自動(dòng)拆箱源碼分析-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第2頁(yè)
Java學(xué)習(xí)之自動(dòng)裝箱和自動(dòng)拆箱源碼分析-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第3頁(yè)
Java學(xué)習(xí)之自動(dòng)裝箱和自動(dòng)拆箱源碼分析-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第4頁(yè)
Java學(xué)習(xí)之自動(dòng)裝箱和自動(dòng)拆箱源碼分析-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、java學(xué)習(xí)z自動(dòng)裝箱和自動(dòng)拆箱源碼分析-編程開(kāi)發(fā)技術(shù)java學(xué)習(xí)之自動(dòng)裝箱和自動(dòng)拆箱源碼分 析原文出處:等風(fēng)的草自動(dòng)裝箱(boxing)和自動(dòng)拆箱(unboxing)首先了解下java的四類(lèi)八種基本數(shù)據(jù)類(lèi)型基本類(lèi)型占用空間(byte)表示范圍包裝器類(lèi)型boolean1/8true|falsebooleanchar2-128127characterbyte1-128127byteshort2-2?152?15-1shortint4-2?312?31-1integerlong8-2?632?63-1longfloat4-3 403e383403e38floatdouble8-1.798e3081

2、.798e308double自動(dòng)裝箱java中所謂的裝箱通俗點(diǎn)就是:八種基本數(shù)據(jù)類(lèi)型在某些條件下使用時(shí),會(huì)口 動(dòng)變?yōu)閷?duì)應(yīng)的包裝器類(lèi)型。如下清單1:©testpublic void boxingtest() integer i1 二 17;tnteger i2 = 17;integer i3 = 137;integer i4 = 137;system.out println(il 二二 i2);11 system, out. println(i3 二二 i4);輸出:truefalse解釋下清單1第11句輸出true的原因:當(dāng)包裝器類(lèi)型進(jìn)行比較時(shí),i3會(huì)調(diào)用integer.valueo

3、f自動(dòng)裝箱基本數(shù)據(jù)類(lèi)型為包裝器 類(lèi)型。/* returns an ©code integer instanee representing the specified* code int value. tf a new code tnteger) instance is not* required, this method should gencreilly be used in prefercncc to* the constructor link ftlnteger(int), as this method is likely* to yield significantly bet

4、ter space and time performance by* caching frequently requested values.* this method will always cache values in the range -128 to 127,* inclusive, and may cache other values outside of this range.* ©param i an ©code int value.* return an code tnteger) instance representing code i).* since

5、 1. 5*/public static integer valueof(int i) if (i 二 integercache. low && i二 integercache. high) return tntegercache. cache i + (tntegercache. 1 ow); return new integer (i);在 lowhigh(-128127),從源碼中可以看出,integer對(duì)象自動(dòng)緩存int值范 如果超出這個(gè)范圍則會(huì)自動(dòng)裝箱為包裝類(lèi)。note:1. integer、short> byte> character、long這幾個(gè)包裝

6、類(lèi)的valueof方法的實(shí)現(xiàn)是類(lèi) 似的;2. double、float的valueof方法的實(shí)現(xiàn)是類(lèi)似的。3. boolean的valueof方法的實(shí)現(xiàn)是個(gè)三口運(yùn)算,形如?return?(b?rae?:?mlse);?v自動(dòng)拆箱jqv3中所謂的拆箱通俗點(diǎn)就是:八種包裝器類(lèi)型在某些條件卜使用時(shí),會(huì)口動(dòng) 變?yōu)閷?duì)應(yīng)的基本數(shù)據(jù)類(lèi)型。清單2:testpublic void unboxingtest() integer il 二 17; int i2 = 17;int i3 二 137;integer i4 二 137;system, out. println(il = i2);10 system, ou

7、t. println(i3 二二 i4);輸出:truetrue解釋下清單2第10句輸出true的原因:當(dāng)程序執(zhí)行到第10句時(shí),i4會(huì)調(diào)用integer. intvalue方法自動(dòng)拆箱包裝器類(lèi) 型為基木數(shù)據(jù)類(lèi)型。/* returns the value of this code integer as an* code int.*/public int intvalue() return value;從源碼可以看出,當(dāng)包裝器類(lèi)型和基本數(shù)據(jù)類(lèi)型進(jìn)行“二二”比較時(shí),包裝器類(lèi)型 會(huì)自動(dòng)拆箱為基本數(shù)據(jù)類(lèi)型。清單3內(nèi)容如f:testpublic void unboxingtest() integer il

8、 二 17;integer i2 = 17;integer i3 = 137;integer i4 = 137;/ 二二system, out println(il 二二 ;system, out. println(i3 = i4);/ equalssystem, out. println (i 1. equal s (i2);15 system, out. println(i3 equals(i4);輸出:t ruefalsetruetrue解釋第15句為什么會(huì)輸出true:因?yàn)樵趇nteger包裝類(lèi)實(shí)現(xiàn)的equals方法中,只要比較的當(dāng)前對(duì)象是integer 實(shí)例,那么就會(huì)自動(dòng)拆箱為基本數(shù)

9、據(jù)類(lèi)型。從以卜tntcgcr類(lèi)的equals方法的 源碼就可看岀:* compares this object to the specified object. the result is* codc true if and only if the argument is not* code null and is an code integer object that* contains the same ©code int value as this object.* param obj the object to compare wi th.* rcturn codc true

10、 if the objects arc the same;* code false otherwise.*/public boolean equals (object obj) if (obj instanceof integer) return value 二二(integer)obj). intvalueo ;return false;note:1. integer、short、byte> character long 這幾個(gè)包裝類(lèi)的 intvalue 方法的實(shí)現(xiàn)是類(lèi) 似的;2. double、float的intvalue方法的實(shí)現(xiàn)是類(lèi)似的。3. boolean的boolean va

11、lue方法的實(shí)現(xiàn)和intvalue方法的實(shí)現(xiàn)也是類(lèi)似的。裝箱拆箱綜合淸單:public static void main(string args) integer a = 1; integer b 二 2;integer c = 3;integer d = 3;integer e = 321;integer f 二 321;long g = 3l;long h = 2l;/會(huì)自動(dòng)拆箱(會(huì)調(diào)用intvalue方法)system, out. print!n (cd);/會(huì)口動(dòng)拆箱后再口動(dòng)裝箱system out printin(e=f);/雖然“二二”比較的是引用的是否是同一對(duì)彖,但這里有算術(shù)運(yùn)算

12、,如果該引 用為包裝器類(lèi)型則會(huì)導(dǎo)致自動(dòng)拆箱system, out. printin(c=(a+b);/ equals比較的是引用的對(duì)象的內(nèi)容(值)是否相等,但這里有算術(shù)運(yùn)算,如 果該引用為包裝器類(lèi)型則會(huì)導(dǎo)/致自動(dòng)拆箱,再自動(dòng)裝箱/ a+b觸發(fā)自動(dòng)拆箱得到值后,再自動(dòng)裝箱與c比較system, out. printin(c. equals(a+b);/首先a+b觸發(fā)口動(dòng)拆箱后值為int型,所以比較的是值是否相等system out println(g=(a+b);首先a+b觸發(fā)自動(dòng)拆箱后值為int型,自動(dòng)裝箱后為integer型,然后g為 long 型system, out. printin(g. equals(a+b);/首先a+h觸發(fā)口動(dòng)拆箱后值為long型,因?yàn)閕nt型的3會(huì)口動(dòng)轉(zhuǎn)型為long 型的g然后自動(dòng)裝箱后為long型,/而g也為long型system, out

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論