下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年優(yōu)勝教育高三階段性調(diào)研測(cè)試生物試題無(wú)附加題含解析
- 2021年大學(xué)暑期疫情防控應(yīng)急工作方案
- 2025年陜西銅川市同官高級(jí)中學(xué)高三下第三次質(zhì)量檢測(cè)試題生物試題含解析
- 2024年中考英語(yǔ)作文熱點(diǎn)話(huà)題預(yù)測(cè)一
- 發(fā)酵甘油行業(yè)相關(guān)項(xiàng)目創(chuàng)業(yè)計(jì)劃書(shū)
- 七年級(jí)生物上冊(cè) 1.1.2 生物學(xué)的基本研究方法教案 (新版)蘇科版
- 二年級(jí)語(yǔ)文上冊(cè) 課文1《語(yǔ)文園地一》教案 新人教版
- 中學(xué)生防溺水安全教育教案
- 中小學(xué)消防安全教育教案
- 元旦安全教育教案
- 高中綜合實(shí)踐 課件教案(高二) 課時(shí)14-第三單元 帶著課題去旅行-第1課時(shí) 制定研學(xué)旅行計(jì)劃-課件
- 農(nóng)商銀行支持地方經(jīng)濟(jì)發(fā)展匯報(bào)材料
- 圍手術(shù)期質(zhì)量評(píng)價(jià)標(biāo)準(zhǔn)(手術(shù)室)
- 小學(xué)心理健康教育-做情緒的主人教學(xué)課件設(shè)計(jì)
- 創(chuàng)建三甲醫(yī)院實(shí)施方案模板(4篇)
- 研究思路圖模板
- 多彩的季節(jié)課件
- 中職《機(jī)械基礎(chǔ)》鍵連接電子教案
- 第十五屆地球小博士全國(guó)地理科普知識(shí)大賽答案-
- 深豎井改絞施工方案
- 施工圖管理制度
評(píng)論
0/150
提交評(píng)論