1. 程式人生 > >java 包裝類學習

java 包裝類學習

一、什麼是包裝類     Java中的8中基本型別並不支援面向物件機制,沒有成員變數,方法可以呼叫。Java為了這一中型別引入了包裝類,即把基本資料型別當成類來處理。
二、基本資料型別與包裝類對應關係
byte Byte
short short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

三、自動裝箱與自動拆箱     自動裝箱就是可以直接把基本資料型別變數直接賦值給包裝類變數。     自動拆箱就是可以直接把包裝類變數直接賦值給基本資料型別變數。          例子:                 使用自動拆箱裝箱                        Integer a = 1;//自動裝箱                        int b = a; //自動拆箱                                  沒有使用自動拆箱裝箱                         Integer a = new Integer(1);                         int b = a.intValue();     使用自動裝箱拆箱可以很方便的對基本型別和包裝類型別進行轉換。
四、包裝類常用的靜態方法
        (一)字串轉換成基本型別                     Xxx.parseXxx(String s)     第一個Xxx代表包裝類(Char 除外)                                                               第二個Xxx代表基本型別                                          例子:                     String intStr = "123";                     int a = Integer.parseInt(intStr);//a = 123                     
                    String floatStr = "45.6f"//f代表float型                     float b = Float.parseFloat(floatStr);//b = 45.6 
        (二)基本型別轉換成字串                     String.valueOf(xxx); //xxx為數值                                          例子:                                          String intStr = String.valueOf(78);//inStr = "78";                     String floatStr = String.valueOf(45.6f);//floatStr = "45.6" 沒有f

五、包裝類的比較
            (一)包裝類與基本資料型別的比較                     包裝型別可以與基本型別直接比較.                     例子:                     Integer a = 10;                     System.out.println("a是否大於6:" + (a > 10));//輸出 a是否大於6:true
            (二)包裝類與包裝類的比較                     因為包裝類是引用型別,如果兩個包裝類變數直接比較,兩個包裝類變數所指向的位置相同,                     結果才會true;
                    情況一、兩個包裝類變數不全使用自動裝箱                     例如:                     Integer a = 10;                     Integer b = new Integer(10);                     System.out.println(""+(a == b));//結果為false,因為a和b指向物件的位置並不相同。
                    情況二、兩個包裝類變數全使用自動裝箱                     例如:                     Integer a = 10;                     Integer b = 10;                     System.out.println(""+(a==b));//結果為true
                    Integer c = 128;                     Integer d = 128;                     System.out.println(""+(c == d));//結果為false
                    那麼問題來了,為什麼兩個的值為10就相同,為什麼值為128的時候就不相同呢?                                                 系統會把-128~127之間的每一個數自動裝箱成一個Integer例項,放進一個cache快取當中,                         每當我們建立-128~127之間的Integer例項的時候,系統就會直接把例項指向cache中對應的例項,                         所以當我們建立的Integer例項的值在-128~127之間的時候,只要他們的值相同,都會指向同一個                         位置,他們的指向相同,所以直接比較的結構就相同。
                        如果建立的Integer例項的數值不在這個範圍裡面,系統每次遇到要建立例項的時候,都會新建立一個                         例項,所以就算例項的數值相同,他們的指向也不相同,所以直接比較的結果肯定不相同。
                     在比較包裝類例項的時候,通常會使用以下方法:                         1、例項.toCompare(另一個例項); 數值相同為0 大於為1 小於為-1                         2、包裝類.compare(包裝類例項1,包裝類例項2);數值相同為0 大於為1 小於為-1
                    

轉載:http://blog.csdn.net/chihson_gzs/article/details/50516119