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

2021-08-22 09:12:26 字數 1000 閱讀 5997

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

for(integern:ints)

returns;

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

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

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

example1.2.3

listbigger=newarraylist(200,300,400);

assertsuminteger(bigger)==sum(bigger);

assertsuminteger(bigger)!=suminteger(bigger)//notrecommended

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

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

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

example1.2.4

listsmalls=newlist(1,2,3);

assertsuminteger(smaller)==sum(smaller);

assertsuminteger(smaller)==suminteger(smaller)//notrecommended

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

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

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

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

for integer n ints return s 在這裡我們看到在進行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...