深入浅出 Java 中的包装类
轉載自? ?深入淺出 Java 中的包裝類
前陣子,我們分享了《Java中的基本數(shù)據類型轉換》這篇文章,對許多粉絲還是有帶來幫助的,今天講一下 Java 包裝類的的由來,及自動裝箱、拆箱的概念和原理。
什么是包裝類型
Java 設計當初就提供了 8 種 基本數(shù)據類型及對應的 8 種包裝數(shù)據類型。我們知道 Java 是一種面向對象編程的高級語言,所以包裝類型正是為了解決基本數(shù)據類型無法面向對象編程所提供的。
下面是基本數(shù)據類型與對應的包裝類型。
| byte | Byte |
| boolean | Boolean |
| short | Short |
| char | Character |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
下面是包裝類型的繼承結構圖。
?
?
從以上圖表可以對基本類型和包裝類型有一個全面的了解。
包裝類應用場景
1、集合類泛型只能是包裝類;
//?編譯報錯 List<int>?list1?=?new?ArrayList<>();//?正常 List<Integer>?list2?=?new?ArrayList<>();2、成員變量不能有默認值;
private?int?status;基本數(shù)據類型的成員變量都有默認值,如以上代碼 status 默認值為 0,如果定義中 0 代表失敗,那樣就會有問題,這樣只能使用包裝類 Integer,它的默認值為 null,所以就不會有默認值影響。
3、方法參數(shù)允許定義空值;
private?static?void?test1(int?status){System.out.println(status); }看以上代碼,方法參數(shù)定義的是基本數(shù)據類型 int,所以必須得傳一個數(shù)字過來,不能傳 null,很多場合我們希望是能傳遞 null 的,所以這種場合用包裝類比較合適。
還有更多應用場景就不一一例舉了,歡迎留言共同探討包裝類的更多的應用場景。
自動裝箱、拆箱
Java 5 增加了自動裝箱、拆箱機制,提供基本數(shù)據類型和包裝類型的相互轉換操作。
自動裝箱
自動裝箱即自動將基本數(shù)據類型轉換成包裝類型,在 Java 5 之前,要將基本數(shù)據類型轉換成包裝類型只能這樣做,看下面的代碼。
Integer?i1?=?new?Integer(8);Integer?i2?=?Integer.valueOf(8);//?自動裝箱 Integer?i3?=?8;以上 3 種都可以進行轉換,但在 Java 5 之前第 3 種方法是編譯失敗的,第 3 種方法也正是現(xiàn)在的自動裝箱功能。另外,第一種構造器方法也不推薦使用了,已經標為廢棄了。
其實自動裝箱的原理就是調用包裝類的 valueOf 方法,如第 2 個方法中的 Integer.valueOf 方法。
自動拆箱
自動拆箱即自動將包裝類型轉換成基本數(shù)據類型,與自動裝箱相反,有裝就有拆,很好理解。
//?自動拆箱 int?i4?=?i3;int?i5?=?i3.intValue();繼續(xù)上面的例子,把 i3 賦值給 i4 就是實現(xiàn)的自動拆箱功能,自動裝箱的原理就是調用包裝類的 xxValue 方法,如 i5 中的 Integer 的 intValue 方法。
自動裝箱、拆箱不只是體現(xiàn)在以上的例子,在方法接收參數(shù)、對象設置參數(shù)時都能自動裝箱拆箱。
需要注意的是,關于 Integer,-128 ~ 127 會有緩存,對比這個范圍的值的對象是一個坑,這個在阿里巴巴規(guī)范中也有提及。?詳細請參考《IntegerCache的妙用和陷阱》這篇文章。
總結
以上是生活随笔為你收集整理的深入浅出 Java 中的包装类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最值得程序员get的30本行业干货
- 下一篇: java美元兑换,(Java实现) 美元