一、定義:
(推薦學(xué)習(xí):java入門程序)
Java是一個面向?qū)ο蟮木幊陶Z言,但是Java中的八種基本數(shù)據(jù)類型并不是面向?qū)ο蟮?,為了使用方便和解決這個不足,在設(shè)計類時為每個基本數(shù)據(jù)類型設(shè)計了一個對應(yīng)的類進行代表,這樣八種基本數(shù)據(jù)類型對應(yīng)的類統(tǒng)稱為包裝類(Wrapper Class),包裝類均位于java.lang包中。
二、包裝類的用途
為了使用方便,Java中將8中基本數(shù)據(jù)類型進行了封裝:除了Integer和Character類以外,其它六個類的類名和基本數(shù)據(jù)類型一致,只要將類名的第一個字母大寫即可。
boolean —> Boolean
char —> Character
byte—> Byte
short—> Short
long—> Long
int —> Integer
float—> Float
double—> Double
對于包裝類說,用途主要包含兩種:
a、作為和基本數(shù)據(jù)類型對應(yīng)的類存在,方便涉及到對象的操作。
b、包含每種基本數(shù)據(jù)類型的相關(guān)屬性,如最大值、最小值等,以及相關(guān)的操作方法。
三、包裝類的實際使用(以int和integer為例)
1、int和integer類之間的轉(zhuǎn)換
在實際轉(zhuǎn)換時,使用Integer類的構(gòu)造方法和Integer類內(nèi)部的intValue方法實現(xiàn)這些類型之間的相互轉(zhuǎn)換。
// int n=5; Integer n1=new Integer(n); System.out.println("int類型轉(zhuǎn)換為integer類:"+n1); // Integer i=new Integer(50); int i1 = i.intValue(); System.out.println("integer類轉(zhuǎn)換為int類型:"+i1);
2、Integer類內(nèi)部的常用方法
Integer類的主要方法有:parseInt方法和toString方法。
//parseInt方法: 數(shù)字字符串類型轉(zhuǎn)成int類型 String ss="123"; int ii = Integer.parseInt(ss); System.out.println("字符類型轉(zhuǎn)成整型:"+ii); //toString方法:int類型轉(zhuǎn)成數(shù)字字符串類型 int ii2=123; String ss2 = Integer.toString(ii2); System.out.println("int類型轉(zhuǎn)成數(shù)字字符串類型:"+ss);
JDK自從1.5版本以后,就引入了自動拆裝箱的語法,也就是在進行基本數(shù)據(jù)類型和對應(yīng)的包裝類轉(zhuǎn)換時,系統(tǒng)將自動進行,這將大大方便程序員的代碼書寫。
(視頻教程推薦:java視頻教程)
自動裝箱:將 基本數(shù)據(jù)類型 封裝為對象類型,來符合java的面向?qū)ο蟮乃枷搿?
自動拆箱:將對象重新轉(zhuǎn)化為基本數(shù)據(jù)類型。
//5是基本數(shù)據(jù)類型,通過自動裝箱變成對象類型。 //編譯器執(zhí)行了Integer iii = Integer.valueOf(5) Integer iii=5; //自動拆箱,實際上執(zhí)行了 int iii2 = iii.intValue() int iii2=iii; System.out.println(iii2);
說明:Integer iii=5;相當于編譯器執(zhí)行了Integer iii = Integer.valueOf(5)操作。
這個方法就是返回一個 Integer對象,只是在返回之前,看作了一個判斷,判斷當前 i 的值是否在 [-128,127] 區(qū)別,且 IntegerCache 中是否存在此對象,如果存在,則直接返回引用,否則,創(chuàng)建一個新的對象。
3、包裝類的緩存值
各個包裝類緩存值范圍 :
boolean:true和false byte:-128~127 char:0~127 short:-128~127 int:-128~127 long:-128~127
特別注意:對于float和double沒有緩存。
在對上述值進行裝箱的時候(如:Character c1=127;or Integer i= Integer.valueOf(1); 這個不行哦:Integer i2=new Integer(1);因為這是新建了一個對象出來。),并不是創(chuàng)建一個新對象而是使用緩存中的對象,如果超出范圍則需要新建立對象。