java 包裝類學習
阿新 • • 發佈:2018-12-01
一、什麼是包裝類
Java中的8中基本型別並不支援面向物件機制,沒有成員變數,方法可以呼叫。Java為了這一中型別引入了包裝類,即把基本資料型別當成類來處理。
二、基本資料型別與包裝類對應關係
三、自動裝箱與自動拆箱 自動裝箱就是可以直接把基本資料型別變數直接賦值給包裝類變數。 自動拆箱就是可以直接把包裝類變數直接賦值給基本資料型別變數。 例子: 使用自動拆箱裝箱 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
二、基本資料型別與包裝類對應關係
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.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