使用jdk1 5裝箱及拆箱功能時注意的問題

2021-05-25 06:29:28 字數 1005 閱讀 7824

**:

for(integer n : ints) 

return s;

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

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

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

example1.2.3

listbigger = new arraylist(200, 300, 400);

assert suminteger(bigger) == sum(bigger);

assert suminteger(bigger) != suminteger(bigger) //not recommended

我們看到在第一段比較時,對integer進行了拆箱的操作,然後再和int比較,則結果一定是900.第二個比較,因為兩者都為integer,但它們並不是同一物件的引用,所以自然就不相等。

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

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

example1.2.4

listsmalls = new list(1,2,3);

assert suminteger(smaller) == sum(smaller);

assert suminteger(smaller) == suminteger(smaller) //not recommended

因為總和的值為6,所以封箱後的值被快取起來,下次封箱的值也為6時,就會呼叫快取中的值,所以我們看到第二個判斷為相等。通常情況下,並沒有指定封箱兩次相同的值會返回相同或不同物件。我們反對用==號進行引用物件的比較,而是使用equals方法來進行判斷物件間的相等情況。

JDK 1 5 新特性 自動拆箱裝箱

1.5版本支援了自動包裝和解包操作,對於bool boolean,byte byte,double double,short short,int integer,long long,float float的相應包裝 解包操作都進行了支援,從而使 變得簡單。這裡需要注意的是,基本資料型別和類型別是不一...

使用jdk1 5裝箱及拆箱功能時注意的問題 推薦

使用jdk1.5裝箱及拆箱功能時注意的問題 for integern ints returns 在這裡我們看到在進行s n這一步時,反覆做了拆箱及封箱操作,我們看到雖然做的是同一件事,但在jvm中執行的效率相差幅度在60 左右。在討論封,拆箱時我們要留意一下以下兩個問題 1 號在原始及引用型別間的定...

JDK1 5的拆裝箱

integer i1 100 integer i2 100 integer i3 200 integer i4 200 integer類內部有乙個快取,其實就是乙個integer,大小為256,它儲存了 128 127之間的所有integer物件。當使用valueof 100 方法時,該方法判斷10...