日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JDK1.5封箱及拆箱功能操作時注意的問題

我們知道Java中所有到的類型要么就是引用類型和要么就是原始數(shù)據(jù)類型,其中原始數(shù)據(jù)類型有其相應的包裹類(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  

 
 
 
  1. public int sum(List ints) {   
  2. int s = 0;   
  3. for(int n : ints)
  4.  {s += n;}  
  5.  return s;  
  6.  }

在該例子,我們看到在遍歷時,當ints把值綁定到n時,進行了拆箱操作。

Example1.2.2

 
 
 
  1. public Integer sumInteger(List ints) {  
  2.  Integer s = 0; 
  3.   for(Integer n : ints) { 
  4.  s += n;}   
  5.  return s;   
  6. }

在這里我們看到在進行s += n這一步時,反復做了拆箱及封箱操作,我們看到雖然做的是同一件事,但在JVM中執(zhí)行的效率相差幅度在60%左右。

在討論封,拆箱時我們要留意一下以下兩個問題:

(1)==號在原始及引用類型間的定義是不同的,我們在處理比較相等問題時要特別留意封,拆箱帶來的問題:

Example1.2.3

 
 
 
  1. List bigger = new ArrayList(200, 300, 400);   
  2. Assert sumInteger(bigger) == sum(bigger);   
  3. Assert sumInteger(bigger) != sumInteger(bigger) //not recommended

我們看到在***段比較時,對Integer進行了拆箱的操作,然后再和int比較,則結(jié)果一定是900.第二個比較,因為兩者都為Integer,但它們并不是同一對象的引用,所以自然就不相等。

我們推薦使用==號比較int類型,用equals方法去比較Integer類型間的相等性。

(2)當對byte, boolean,int(-127 - +128), short(-127 - +128), char(\u0000 - \u007f)在封箱時是必須進行緩存的,而對其它值,也是被允許進行緩存。

Example1.2.4

 
 
 
  1. List smalls = new List(1,2,3);   
  2. Assert sumInteger(smaller) == sum(smaller);   
  3. Assert sumInteger(smaller) == sumInteger(smaller) //not recommended

因為總和的值為6,所以封箱后的值被緩存起來,下次封箱的值也為6時,就會調(diào)用緩存中的值,所以我們看到第二個判斷為相等。通常情況下,并沒有指定封箱兩次相同的值會返回相同或不同對象。我們反對用==號進行引用對象的比較,而是使用equals方法來進行判斷對象間的相等情況。

以上就是JDK1.5封箱及拆箱功能操作時注意的問題,希望這樣的介紹對你有所幫助。


網(wǎng)站標題:JDK1.5封箱及拆箱功能操作時注意的問題
本文路徑:http://www.dlmjj.cn/article/dppdeid.html