? Java中的基本型別功能簡單,不具備物件的特性,為了使基本型別具備物件的特性,所以出現了包裝類,就可以像操作物件一樣操作基本型別資料;包裝類不是為了取代基本資料型別,而是在資料型別需要使用物件表示的時候,才使用包裝類;
1.包裝類的繼承關系

2.基本資料型別和包裝類的關系
| 基本資料型別 | 包裝類 |
|---|---|
| byte | Byte |
| char | Character |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
提示:所有的包裝類+String類都是final修飾的,代表不可以被繼承;
3.包裝類對應的屬性定義(以Integer為例)
System.out.println(Integer.SIZE); //位數 32位
System.out.println(Integer.BYTES); //位元組數 4位元組
System.out.println(Integer.MAX_VALUE); //最大值 2^32-1 2147483647
System.out.println(Integer.MIN_VALUE); //最小值 -2^32 -2147483648
4.包裝型別的基本操作
基本型別,包裝型別,String型別的相互轉換

| 序號 | 型別轉換 | 方法 |
|---|---|---|
| 1 | int->Integer | new Integer(primitive) |
| 2 | Integer->int | Integer 物件.xxxValue() |
| 3 | Integer->String | Integer 物件.toString() |
| 4 | String->Integer | new Integer(String str) |
| 5 | int->String | String.valueOf(primitive) |
| 6 | String->int | Integer.paseXxx(String str) |
4.1 int->Integer new Integer(primitive)
所有包裝類都可以與之對應的基本資料型別作為引數,來構造他們的實體
//1基本資料型別 ->包裝類
//1.1byte->Byte
byte b = 1;
Byte byte1 = new Byte(b);
//1.2 char->Character
Character character1 = new Character('a');
//1.3 short->Short
short s = 2;
Short short1 = new Short(s);
//1.4 int Integer
Integer integer1 = new Integer(4);
//1.5 long->Long
Long long1 = new Long(8);
//1.6 float->Float
Float float1 = new Float((float) 4.0);
//1.7 double->Double
Double double1 = new Double(8.0);
//1.8 boolean->Boolean
Boolean boolean1 = new Boolean(true);
注意:型別一定要對應;
Integer.valueOf(int a)
Integer integer5 = Integer.valueOf(200);
System.out.println(integer5);
原始碼
//也是new 的物件 跟new Integer(primitive)一樣
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
4.2 Integer->int Integer 物件.xxxValue()
物件.xxxValue(),將包裝類轉換為對應的基本資料型別值,所有包裝類都有
Integer integer2 = new Integer(4);
int int2 = integer2.intValue();
System.out.println(int2); //4
4.3 Integer->String Integer 物件.toString()
物件.toString() 將基本資料烈性轉換為String型別
Integer integer3 = new Integer(4);
String string3 = integer3.toString();
System.out.println(string3); //4
4.4 String->Integer new Integer(String str)
除Character類外,其他包裝類可將一個字符作為引數構造他們的實體,前提:字串內容必須跟對應包裝類匹配
Integer integer4 = new Integer("4");
System.out.println(integer4);
Character型別 沒有支持字串的構造方法,因為字串包含多個字符,Character只包含一個字符
Character a = new Character("aa"); //會報錯
Integer.valueOf(String s)
原始碼
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
//先匹配數字,再呼叫new Integer
}
4.5 int->String String.valueOf(primitive)
基本型別轉String型別
String string5 = String.valueOf(100);
System.out.println(string5); //100
String類的valueOf方法

4.6 String->int Integer.paseXxx
直接將字串轉換為對應的基本資料型別Character除外
int int6 = Integer.parseInt("123");
System.out.println(int6); //123
5.裝箱,拆箱
5.1裝箱
自動裝箱,底層就是自動呼叫valuesOf方法實作
Integer integer5_1_1 = 400;
//實際上,系統執行了Integer obj = Integer.valueOf(400);
System.out.println(integer5_1_1); //400
5.2拆箱
Integer integer5_2_1 = new Integer(500);
System.out.println(integer5_2_1+integer5_2_1); //1000
//實際上執行了integer5_2_1.intValue()+integer5_2_1.intValue();
6.包裝類的快取
6.1包裝類的快取范圍
| 包裝類 | 快取范圍 |
|---|---|
| Byte | 全部快取(-128—127) |
| Character | <=127快取 |
| Short | -128—127快取 |
| Integer | -128—127快取 |
| Long | -128—127快取 |
| Float | 沒有快取 |
| Double | 沒有快取 |
| Boolean | 全部快取(true,false) |
6.2案例
Integer integer8_1 = 120;
Integer integer8_2 = 120;
System.out.println(integer8_1 == integer8_2); //true
Integer integer9_1 = 130;
Integer integer9_2 = 130;
System.out.println(integer9_1 == integer9_2); //false
//Integer類中有一個靜態內部類IntegerCache,快取了-128到127之間所有int數字的Integer物件
//120 在-128-127之間 ,產出的物件是從IntegerCache中取出來的
//其他包裝類也是一樣
6.3垃圾回收相關
Integer integer6_3_1 = 100;
integer6_3_1 = null; //integer6_3_1 不會被垃圾回收器回收
//這里雖然integer6_3_1被賦予null,但它之前指向的是cache中的Integer物件,而cache沒有被賦null,所以Integer(100)這個物件還是存在
Integer integer6_3_2 = 128;
integer6_3_2 = null;//integer6_3_2 會被垃圾回收器回收
//integer6_3_2不是快取中的物件,被賦予null后會被垃圾回收器回收
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491813.html
標籤:Java
上一篇:這個Spring Security登錄插件牛啊,驗證碼、小程式、OAuth2都能快速接入
下一篇:函式中引數傳值
