Java包裝類:什麼是包裝類對象,什麼是裝箱拆箱,當編譯遇到自動裝拆箱發生了什麼?(一篇搞定,不能再多了)

什麼是包裝類?

Java設計中一個核心的原則,即萬物皆對象,也就是說一切要求用對象的形式描述,但是基本數據類型不是對象,這就很尷尬 矛盾了,爲了解決這個尷尬 矛盾,採用 把基本數據類型包裝成一個對象,以面向對象的思想去使用這些類型。

包裝類作用?

採用基本數據類型包裝的形式描述,讓功能變得更加健壯,例如: Integer默認不是int的 0 而是 null ,那麼比起基本數據類型,包裝類對象它就多了一個狀態,就像你打王者,除了0代表你沒戰績,null 還可以代表你中途跑路了。

還有一個比較直觀的,就是包裝類給我們提供了很多方法可以使用,例如:數據可以轉二進制,查看最大值最小值等等。

除了上面還有一個要點: 集合中不能存放基本數據類型,只能存放對象 所以當使用集合時,我們的就需要使用到包裝類對象。

何爲裝箱拆箱?

裝箱:基本數據類型轉換成對應的包裝類對象。

拆箱:包裝類對象轉換成對應的基本數據類型。
(裝箱拆箱,自動裝拆箱操作往下看)

Java提供了8種數據類型,對應8種包裝類型

基本數據類型 包裝類型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Byte

注意點:

是不是有人會疑問呢?怎麼沒有String呢???

或者壓根看到我這段文字的的小夥伴才發現的,是不是平時吹基本數據類型把String也帶上了 (→_→)

記住啦 在Java中String 不屬於基本類型,String 是一個對象

好了,進入主題

裝箱操作

把基本類型轉換成對應的包裝類對象

第一種裝箱方式:直接使用new

int i = 10;
Integer num = new Integer(i);
System.out.print(num);

第二種裝箱方式:調用valueOf()的方式

Integer num_2 = Integer.valueOf(20);
System.out.println("調用valueOf()的方式:" + num_2);

運行結果
在這裏插入圖片描述
擴展點:

細心的小夥伴你會發現,咦,打印對象不應該是地址嗎,竟然是數字?

說明了什麼?

包裝類內部也覆蓋了toString

public String toString() {
     return toString(value);
}

拆箱操作

與裝箱相反,把包裝類對象轉成對應的基本數據類型

調用intValue方式拆箱,這裏其實就是將Integer類型轉化爲Int類型

Integer num_1 = Integer.valueOf(20);
int num_2 = num_1.intValue();
System.out.println(num_1);
System.out.println(num_2);

運行結果

(很直觀的區別在於num_1變量是Integer包裝類對象所以可以調用方法,而num_2是基本類型int不能)
在這裏插入圖片描述

自動裝箱

基本數據類型直接賦值給包裝類對象

Integer num_1 = 66;
System.out.println(num_1);

自動拆箱

包裝類對象直接賦值給基本數據類型

Integer num_1 = 66;
int num_2 = num_1;
System.out.println(num_2);

運行結果
在這裏插入圖片描述
很神奇是不是??

不用我們自己親自去裝箱拆箱

信你這顆剽悍的種子!壞得很 (●ˇ∀ˇ●)

那誰幫我們做了?

當然是我們的JVM啦,在我們編譯的時候幫我們加上了valueOf,裝箱了

想問我怎麼知道的?

偷偷告訴你,用反編譯工具查看編譯後的class文件,有碼有真相

編譯的時候幫你加上了,沒想到吧,哈哈

這種方式有一個術語稱爲: 語法糖

吃了這顆語法糖,該乾的活,幫你幹了,果然很甜呀

自動裝箱拆箱 本質上是編譯的時候幫你加上 valueOf 或 intValue

自動裝箱 valueOf

	Integer num_1 = Integer.valueOf(66);

自動拆箱 intValue

	int num_2 = num_1.intValue();

最後:

如果再深入一些,還可以再剖析一下 valueOf 和 intValue 這兩個關鍵字的一些機制的,但是昨日這篇寫了我一天,今早也還在修修補補,時光來去總是匆匆,我想我只能留下次來寫了,寫博客以來,寫的很慢,但也寫的很較真,因爲 把我會的,認真的分享 ,是我 一顆剽悍的種子 寫博客一直不變的信條。如果你能看到這篇,說明咱們還是很有緣的,希望能帶給你一些許幫助,創作的不易, 把我文章的知識帶走,你的三連留下,點贊,評論,關注,是我最大的動力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章