Java中包裝類 裝箱和拆箱

Java中,數據類型總體可以分爲兩大類:基本數據類型(值類型)&類類型(數據引用類型)。

基本數據類型的數據不是對象,不能作爲對象調用其toString(), hashCode() ,equail(),getClass()等等。

所以Java就專門針對8大基本類型封裝了類:

包裝類:short Short,byte Byte,int Integer,long Long,double Double,float Filoat,char Char,boolean Boolean。

所謂的裝箱:就是把基本類型用他們相應的引用類型包起來,是他們具有對象的特質。如int封裝成Integer等

所謂的拆箱:正好和裝箱相反,就是把Integer的這種引用類型的對象重新簡化爲基本類型數據。

知識擴展:

包裝類的緩存:
包裝類是不可變的,就像String類一樣,String類的對象以及創建,便不可改變,所以多個引用指向同一個String對象也不會有什麼危險,因此,在編譯階段將String常量置入字符串常量池中,當下次使用時就可以直接從字符串常量池中提取。對於包裝類,其對象同樣是不可改變的,所以對於某些頻繁使用的值,系統提供了包裝類的緩存(即預先創建了經常使用的包裝類對象,可以參考包裝類的valueOf方法),當需要時直接從緩存中提取,而不再創建一個新的包裝類對象,這些緩存的包裝類的值如下:
boolean的所有值(true和false)
byte的所有值(-128~127)
char值的(0~127)
short值的(-128~127)
int值的(-128~127)
long值的(-128~127)
對於浮點類型的float與double,包裝類沒有緩存。
對以上的數值進行封箱的時候,並不是創建一個新的對象,而是使用緩存中的對象,這樣當重複使用的時候就可以避免重複創建對象造成浪費,因爲與String類對象一樣,包裝類對象時不可變的,因此使用多個引用指向一個包裝類時也不會有什麼影響。
所以, character c1=127; character c2=127;不論是“equal”還是“==”c1和c2的運算結果都是true.
character c3=128; character c4=128;c3和c4的“equal”運算時true,“==”運算時false。

Interger i1= new Integer(20);
Interger i2= new Integer(20);
System.out.println(i1==i2); 結果是false而不是true;請仔細體會之。

 



參考文獻地址:http://hi.baidu.com/smilehaha/item/

              http://changwu0101.blog.163.com/blog/static/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章