包裝類
要知道什么是裝箱和拆箱下面,首先要了解什么是包裝類。
在面向?qū)ο螽?dāng)中“一切皆對(duì)象”襟齿。
基本數(shù)據(jù)類型變量不是對(duì)象喇潘,比如 int a = 10; 當(dāng)中就沒有對(duì)象,所以就很矛盾遵堵。
此時(shí)我們就可以對(duì)象基本數(shù)據(jù)類型進(jìn)行包裝箱玷,把基本數(shù)據(jù)類型包裝一個(gè)對(duì)象。
把基本數(shù)據(jù)類型變的更強(qiáng)大陌宿,以面向?qū)ο蟮乃枷雭砣ナ褂眠@些類型锡足。
對(duì)基本數(shù)據(jù)類型包裝的好處
使用包裝對(duì)象后,功能變的更加強(qiáng)大壳坪。
比如:以前使用double來去表示一個(gè)人的分?jǐn)?shù)舶得。此時(shí)這個(gè)人的分?jǐn)?shù)考了0分,可以表示0.0爽蝴。 如果這個(gè)人沒有來考試沐批,那就代表這個(gè)沒有分?jǐn)?shù)。使用包裝類型后蝎亚, 即可表示這兩種狀態(tài)一個(gè)0.0 一個(gè) 是null九孩。 基本數(shù)據(jù)類型就辦不到。包裝類當(dāng)中給我們提供了很多方法发框,可以直接過來使用
比如:我們要將一個(gè)數(shù)據(jù)轉(zhuǎn)成二進(jìn)制躺彬。使用包裝對(duì)象后, 就可以直接調(diào)用方法算出來缤底。使用包裝對(duì)象后顾患, 就可以直接調(diào)用方法算出來。
裝箱與拆箱
- 把基本數(shù)據(jù)類型變成包裝類 我們稱為裝箱操作个唧。
Integer num = new Integer(10);
Integer num2 = Integer.valueOf(20);
// Integer.valueOf本質(zhì)也是new Integer創(chuàng)建江解,只不過當(dāng)中多了一個(gè)緩存判斷
- 把包裝類對(duì)象轉(zhuǎn)成對(duì)應(yīng)的基本數(shù)據(jù)類型我們稱為拆箱。
Integer num = new Integer(10); // 裝箱
int num2 =num.intValue() // 拆箱
Double d = Double.valueOf(10.5) // 裝箱
double d1 = d.doubleValue(); // 拆箱
自動(dòng)裝箱與自動(dòng)拆箱
- 自動(dòng)裝箱:可以直接把一個(gè)基本數(shù)據(jù)類型的值賦值給包裝類對(duì)象
Integer i = 10
- 自動(dòng)拆箱:可以只直接把一個(gè)包裝類對(duì)象賦值給基本數(shù)據(jù)類型的變量
int i1 = i
自動(dòng)裝箱和自動(dòng)拆箱是Java SE5之后才有的徙歼,它內(nèi)部是如何實(shí)現(xiàn)的呢犁河?我們可以借助反編譯來找到答案:
public class Main{
public static void main(String[] args) {
Integer i = 10; // 自動(dòng)裝箱
int n = i;// 自動(dòng)拆箱
}
}
反編譯后得到如下結(jié)果:
由反編譯的結(jié)果可知:
- java自動(dòng)裝箱過程是調(diào)用包裝類的valueOf方法實(shí)現(xiàn)的
- 而自動(dòng)拆箱的過程則是調(diào)用包裝類的xxxValue方法實(shí)現(xiàn)的