包裝類是比較容易被人忽視的一個東西
1、JAVA為什麼會有這個東西
Java語言是一個面向對象的語言,但是Java中的基本資料類型卻是不面向對象的,這在實際使用時存在很多的不便,為了解決這個不足,在設計類時為每個基本資料類型設計了一個對應的類進行代表,這樣八個和基本資料類型對應的類統稱為包裝類(Wrapper Class),有些地方也翻譯為外覆類或資料類型類。
2、它是啥
包裝類均位于java.lang包,包裝類和基本資料類型的對應關系如下表所示:
基本類型 包裝類
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
在這八個類名中,除了Integer和Character類以後,其它六個類的類名和基本資料類型一直,隻是類名的第一個字母大寫即可。
3、差別:
基本類型一般都是把值放在棧空間的,而包裝類是棧空間放位址,值放在這個位址指向的堆空間:
int i = 5;//直接在棧中配置設定空間
Integer i = new Integr(5);//對象是在堆記憶體中,而i(引用變量)是在棧記憶體中
比如: Integer 的預設值是 null,int的預設值0
4、它有哪些主要功能
這些類的用途主要包含兩種:
- 作為和基本資料類型對應的類類型存在,友善涉及到對象的操作。
- 包含每種基本資料類型的相關屬性如最大值、最小值等,以及相關的操作方法。
- (其他後文提到的一些特性其實也屬于這兩種)
5、一般人會在什麼時候注意、用到它
- 當需要往ArrayList,HashMap中放東西時,像int,double這種基本類型是放不進去的,因為容器都是裝object的,這是就需要這些基本類型的外覆類了。Java中每種基本類型都有相應的外覆類。
- 面試題裡考你自動拆裝箱的時候
6、它的一大特點、難點:自動拆裝箱
用不着先不管,暫時跳過,(好像也不難)。。
可以參考:
http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html
https://www.zhihu.com/question/27194744?sort=created
7、一個詭異
- 沒有方法可以直接改變一個Integer對象的值,隻能重新初始化一個新的
- 這個其實是我這次研究這個東西的主要目的,後來發現真的不可以
- 網上直接提這個的很少,有一些評論裡提到了,然後我确實在JAVA7的API裡找不到接口