1. 程式人生 > >Java_52.1_基本資料型別_包裝器型別的關係

Java_52.1_基本資料型別_包裝器型別的關係

在程式設計中經常用到一系列的資料型別,在Java中也一樣包含八中資料型別,這八種資料型別又各自對應一種包裝器型別。

String包裝類引用型別

如下表:

基本型別  包裝器型別
boolean Boolean
char Character
int Integer
byte Byte
short Short
long Long
float Float
double Double

為什麼存在這兩種型別呢?

我們都知道在Java語言中,new一個物件儲存在堆裡,我們通過堆疊中的引用來使用這些物件;但是對於經常用到的一系列型別如int,如果我們用new將其儲存在堆裡就不是很有效——特別是簡單的小的變數。
所以就出現了基本型別,同C++一樣,Java採用了相似的做法,對於這些型別不是用new關鍵字來建立,而是直接將變數的值儲存在堆疊中,因此更加高效。

有了基本型別之後為什麼還要有包裝器型別呢?我們知道Java是一個面相物件的程式語言,基本型別並不具有物件的性質,為了讓基本型別也具有物件的特徵,就出現了包裝型別(如我們在使用集合型別Collection時就一定要使用包裝型別而非基本型別),它相當於將基本型別“包裝起來”,使得它具有了物件的性質,並且為其添加了屬性和方法,豐富了基本型別的操作。

另外當需要往ArrayList,HashMap中放東西時,像int,double這種基本型別是放不進去的,因為容器都是裝object的,這是就需要這些基本型別的包裝器類了。

二者可以相互轉換:

1 Character ch = new Character('x');
2 char c = ch;
3 char c = 'c';
4 Character ch = new Character(c);

二者之間也存在一些區別:

1.宣告方式不同,基本型別不適用new關鍵字,而包裝型別需要使用new關鍵字來在堆中分配儲存空間;
 
2.儲存方式及位置不同,基本型別是直接將變數值儲存在堆疊中,而包裝型別是將物件放在堆中,然後通過引用來使用;
 
3.初始值不同,基本型別的初始值如int為0,boolean為false,而包裝型別的初始值為null
 
4.使用方式不同,基本型別直接賦值直接使用就好,而包裝型別在集合如Collection、Map時會使用到。

PS:包裝器型別是引用型別。