使用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...