十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
今天就跟大家聊聊有關(guān)JDK1.5封箱及拆箱功能操作時注意的問題是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

為南鄭等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及南鄭網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、成都做網(wǎng)站、南鄭網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
我們知道Java中所有到的類型要么就是引用類型和要么就是原始數(shù)據(jù)類型,其中原始數(shù)據(jù)類型有其相應(yīng)的包裹類(Wrapper Class),包括:Byte(byte), Short(short), Integer(int), Long(long), Float(float), Double(double), Boolean(bool), Char(char)。
我們將原始數(shù)據(jù)類型及其包裹類間的互相轉(zhuǎn)換稱為封箱及拆箱操作。
Generics為我們提供了自動封拆箱的功能,記住在設(shè)定泛型的類型參數(shù)(type parameter時,只能使用引用類型,絕對不能使用原始數(shù)據(jù)類型。我們以以下的示例來說明:
Example1.2.1
public int sum(List ints) { int s = 0; for(int n : ints) {s += n;} return s; }在該例子,我們看到在遍歷時,當(dāng)ints把值綁定到n時,進行了拆箱操作。
Example1.2.2
public Integer sumInteger(List ints) { Integer s = 0; for(Integer n : ints) { s += n;} return s; }在這里我們看到在進行s += n這一步時,反復(fù)做了拆箱及封箱操作,我們看到雖然做的是同一件事,但在JVM中執(zhí)行的效率相差幅度在60%左右。
在討論封,拆箱時我們要留意一下以下兩個問題:
(1)==號在原始及引用類型間的定義是不同的,我們在處理比較相等問題時要特別留意封,拆箱帶來的問題:
Example1.2.3
List bigger = new ArrayList(200, 300, 400); Assert sumInteger(bigger) == sum(bigger); Assert sumInteger(bigger) != sumInteger(bigger) //not recommended
我們看到在***段比較時,對Integer進行了拆箱的操作,然后再和int比較,則結(jié)果一定是900.第二個比較,因為兩者都為Integer,但它們并不是同一對象的引用,所以自然就不相等。
我們推薦使用==號比較int類型,用equals方法去比較Integer類型間的相等性。
(2)當(dāng)對byte, boolean,int(-127 - +128), short(-127 - +128), char(\u0000 - \u007f)在封箱時是必須進行緩存的,而對其它值,也是被允許進行緩存。
Example1.2.4
List smalls = new List(1,2,3); Assert sumInteger(smaller) == sum(smaller); Assert sumInteger(smaller) == sumInteger(smaller) //not recommended
因為總和的值為6,所以封箱后的值被緩存起來,下次封箱的值也為6時,就會調(diào)用緩存中的值,所以我們看到第二個判斷為相等。通常情況下,并沒有指定封箱兩次相同的值會返回相同或不同對象。我們反對用==號進行引用對象的比較,而是使用equals方法來進行判斷對象間的相等情況。
看完上述內(nèi)容,你們對JDK1.5封箱及拆箱功能操作時注意的問題是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。