1. 程式人生 > 其它 >自動裝箱與拆箱

自動裝箱與拆箱

技術標籤:java

自動裝箱與拆箱

兩行程式碼簡潔明瞭

 //自動裝箱
 Integer total = 99;
 
 //自動拆箱
 int totalprim = total;

裝箱就是自動將基本資料型別轉換為包裝器型別;拆箱就是自動將包裝器型別轉換為基本資料型別。
在這裡插入圖片描述
在java中每一個基本資料型別都有一個與之相應的引用資料型別,基本資料型別一般用於算術運算,
布林型別的判斷,關係運算等.但是無法進行物件的操作(方法呼叫,屬性呼叫等),但是通過基本資料
型別的封裝型別可以對基本資料型別物件進行操作,比如進行字串與基本資料型別之間的轉換等;

注意:
其中int對應的是Integer,char對應的是Character,其餘的六個都是首字母進行了轉換

基本資料型別物件包裝類的特點是:用於基本資料型別和字串之間的相互轉換

parseXXX(String s);
其中XXX表示基本資料型別,引數為可以轉換成基本資料型別資料的字串,如果字串無法完成正常的轉換
程式將會出現一個:NumberFormatException

將基本資料型別轉化成字串有幾種方式:
1、基本資料型別和""相連線即可;比如:34 + “”
2、呼叫String的valueOf方法;String.valueOf(65);
3、呼叫封裝型別中的toString方法;Integer.toString(35);

基本資料型別和物件之間進行相互轉換
使用int型別與Integer物件進行轉換,其他的基本資料型別與物件的轉換基本一致

基本數值 int -----> 封裝型別 Integer

自動裝箱和拆箱
在需要的情況下,基本資料型別與封裝型別通用。有些時候我們必須使用封裝型別的時候,就可以將
基本資料型別轉換成封裝型別

比如:
基本型別可以使用運算子進行直接計算,但是引用型別不可以.而封裝型別作為引用資料型別的一種
可以進行計算。原因在於java"偷偷的"自動的進行了物件向基本資料型別的轉換
相對應的,引用資料型別變數必須是new出來的記憶體空間地址,而我們如果想要將一個基本資料型別
賦值給一個封裝型別的時候,java也在"偷偷的"進行轉換
Integer iiiii = 100; 底層自動進行了轉換,就相當於Integer iiiii = Integer.valueOf(100);

底層有一個IntegerCache快取陣列,儲存的值的範圍是 -128 ~ 127之間如果在這個範圍之內,能後自動進行轉換
儲存的是同一個元素,地址相同
如果超過了這個範圍,底層會自動new Integer物件,兩個物件的值相同,但是地址不同

自動裝箱:基本數值轉換成物件 int —valueOf方法-----> Integer
自動拆箱:封裝型別 Integer ----intValue方法-----> int

    int a = 10;
    int b = 10;
    Integer x = 10;
    Integer y = 10;
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(a == b);//true 基本資料型別比較的是值

    System.out.println(x == a);//true 底層自動拆箱 (x.intValue()轉換成基本資料型別)

    System.out.println(x == y);//true

    System.out.println(m == n);//false 比較兩個物件的地址

    System.out.println(x == n);//false

    System.out.println(a == n);//true

    boolean flag = m.equals(x);//比較的值
    System.out.println(flag);//true

情況1:
int a = 值;
int b = 值;
a == b 比較值
情況2:
Integer x = 值;
Integer y = 值;
(1)值在[-128 ~ 127]之間返回true
(2)不在這個區間內,返回false
情況3:
Integer m = new Integer(值);
Integer n = new Integer(值);
m == n 比較的是地址,返回false
情況4:
Integer x = 值;
Integer m = new Integer(值);
x == m 比較地址,返回false
情況5:
int a = 值;
Integer x = 值;
a == x 其實等價於 a = x.intValue() 進行拆箱 true 比較基本資料型別
情況6:
int a = 值;
Integer m = new Integer(值);
a == m
a == m 進行拆箱,比較基本資料型別的值
情況7:
呼叫Integer類中的equals方法,比較的值