Java 從Character和char的區別來學習自動拆箱裝箱

本文結構
1.Character和char 的區別:
2.自動拆箱裝箱java

1.Character和char 的區別:

Character是類,char基本數據類型.數組

在java中有三個類負責對字符的操做:Character、String、StringBuffer。其中Character類是對單個字符進行操做,String是對一個字符序列的操做,StringBuffer是對一串字符進行操做。緩存

char能夠自動包裝成Character;Character也能夠自動拆包成char。jvm

java中默認基本類型的數據是分配在棧上,若是你想把它包裝成一個類的對象,讓它分配在堆上,就須要用到包裝類,Character就是char的包裝類。code

char能夠自動包裝成Character;Character也能夠自動拆包成char.對象

2.自動拆箱和裝箱

每一種基本數據類型,都對應了一個包裝類:繼承

byte——Byteclass

int——Integer變量

char——Character數據類型

。。。。。

這些包裝類final修飾不能被繼承。

每個包裝類對象,維護了一個對應的基本數據類型的值,且這個對象的值不會變,永遠對應。1——Integer(1)

//裝箱
int a=1;
Integer integer=new Integer(a);
//將基本數據類型的值封裝到其對應的包裝類對象中,叫作裝箱。

//拆箱
int i=integer.intValue();//注意integer同上,都爲定義的對象名
Sout輸出爲1
//從包裝類對象中,取出其所包裝的基本數據類型的值,叫作拆箱。
    
//自動裝箱
int a=1;
Integer integer=a;//竟然把一個基本類型值賦值給了引用型變量,好矛盾,實際上jvm自動裝箱了。
//Integer integer=new Integer(a);jvm自動補齊了

//自動拆箱
int b=integer;//竟然把地址賦值給了基本類型的變量裏
//int b=integer.intValue();jvm自動補齊了


Integer integer1=1;
Integer integer2=1;
SOUT(integer1==integer2);//輸出的是true
//不對呀兩個對象應該是兩個地址呀,這是由於對於數據範圍-128~127這個範圍的包裝類對象,作了緩存,
//因此倆是一個對象
    
//注意:雖然有了自動裝箱和自動拆箱,但不是在全部的場景下基本數據類型的值與包裝類對象都等價
//第一個場景
int[] a=new int[100];
Integer[] b=a;//報錯,不行,站在整個數組的角度來看是錯誤的

a[0]=new Integer(100);//能夠,站在單個數組單元來看是能夠的

//第二個場景
//父類方法用int型
//子類方法用Integer報錯
相關文章
相關標籤/搜索