封裝類(Wrapper Class)
封裝類是針對於原生資料類型的封裝。
因為有8個原生資料類型,所以對應有8個封裝類。
所有的封裝類(8個)都位於java.lang下。
Java中的8個封裝類分別是:Byte, Short, Integer, Long, Float, Double, Character, Boolean,它們的使用方式都是一樣的,可以實現原生資料類型與封裝類型的雙向轉換。
Java語言是一個物件導向的語言,但是Java中的基礎資料型別 (Elementary Data Type)卻是不物件導向的,這在實際使用時存在很多的不便,為瞭解決這個不足,在設計類時為每個基礎資料型別 (Elementary Data Type)設計了一個對應的類進行代表,這樣八個和基礎資料型別 (Elementary Data Type)對應的類統稱為封裝類(Wrapper Class),有些地方也翻譯為外覆類或資料類型類。
封裝類均位於java.lang包,封裝類和基礎資料型別 (Elementary Data Type)的對應關係如下表所示:
封裝類對應表
| 基礎資料型別 (Elementary Data Type) |
封裝類 |
| byte |
Byte |
| boolean |
Boolean |
| short |
Short |
| char |
Character |
| int |
Integer |
| long |
Long |
| float |
Float |
| double |
Double |
在這八個類名中,除了Integer和Character類以後,其它六個類的類名和基礎資料型別 (Elementary Data Type)一直,只是類名的第一個字母大寫即可。
對於封裝類說,這些類的用途主要包含兩種:
a、作為和基礎資料型別 (Elementary Data Type)對應的類類型存在,方便涉及到對象的操作。
b、包含每種基礎資料型別 (Elementary Data Type)的相關屬性如最大值、最小值等,以及相關的操作方法。
由於八個封裝類的使用比較類似,下面以最常用的Integer類為例子介紹封裝類的實際使用。
1、實現int和Integer類之間的轉換
在實際轉換時,使用Integer類的構造方法和Integer類內部的intValue方法實現這些類型之間的相互轉換,實現的代碼如下:
int n = 10;
Integer in = new Integer(100);
//將int類型轉換為Integer類型
Integer in1 = new Integer(n);
//將Integer類型的對象轉換為int類型
int m = in.intValue();
2、Integer類內部的常用方法
在Integer類內部包含了一些和int操作有關的方法,下面介紹一些比較常用的方法:
a、parseInt方法
public static int parseInt(String s)
該方法的作用是將數字字串轉換為int數值。在以後的介面編程中,將字串轉換為對應的int數字是一種比較常見的操作。使用樣本如下:
String s = “123”;
int n = Integer.parseInt(s);
則int變數n的值是123,該方法實際上實現了字串和int之間的轉換,如果字串都包含的不是都是數字字元,則程式執行將出現異常。(說明:異常的概念將在下一章進行講述)
另外一個parseInt方法:
public static int parseInt(String s, int radix)
則實現將字串按照參數radix指定的進位轉換為int,使用樣本如下:
//將字串”120”按照十進位轉換為int,則結果為120
int n = Integer.parseInt(“120”,10);
//將字串”12”按照十六進位轉換為int,則結果為18
int n = Integer.parseInt(“12”,16);
//將字串”ff”按照十六進位轉換為int,則結果為255
int n = Integer.parseInt(“ff”,16);
這樣可以實現更靈活的轉換。
b、toString方法
public static String toString(int i)
該方法的作用是將int類型轉換為對應的String類型。
使用範例程式碼如下:
int m = 1000;
String s = Integer.toString(m);
則字串s的值是”1000”。
另外一個toString方法則實現將int值轉換為特定進位的字串:
public static int parseInt(String s, int radix)
使用範例程式碼如下:
int m = 20;
String s = Integer.toString(m);
則字串s的值是”14”。
其實,JDK自從1.5(5.0)版本以後,就引入了自動拆裝箱的文法,也就是在進行基礎資料型別 (Elementary Data Type)和對應的封裝類轉換時,系統將自動進行,這將大大方便程式員的代碼書寫。使用範例程式碼如下:
//int類型會自動轉換為Integer類型
int m = 12;
Integer in = m;
//Integer類型會自動轉換為int類型
int n = in;
所以在實際使用時的類型轉換將變得很簡單,系統將自動實現對應的轉換。
下面以主要Integer類為例說明。 Integer
Integer類將int類型的值封裝到一個對象中。
Integer通過下面這個構造方法構造相應的整型數的對象:
public Integer(int value);
public int intValue()方法則返回這個封裝類所封裝的整型值。 自動裝箱/拆箱(Autoboxing/unboxing)
JDK5.0的一個新特性是自動裝箱和自動拆箱。
自動裝箱/拆箱大大方便了基本類型資料和它們封裝類的使用。
自動裝箱:基本類型自動轉為封裝類(int >> Integer)
自動拆箱:封裝類自動轉為基本類型(Integer >> int)
比如下面的例子:
import java.util.ArrayList;import java.util.Collection;public class BoxTest{ public static void main(String[] args) { Collection<Integer> c = new ArrayList<Integer>(); c.add(3);//將int類型的3轉換為Integer類型並放到集合當中 }
}
封裝類型 : Byte,Integer,Short,Long,Boolean,Character,Float,Double等
基本類型(primitive type)
不用new來建立變數,而是建立一個並非是“引用”的“自動”變數。這個變數擁有它的“值”,共置於堆
棧中,因此更加高效。要確定每種基本類型所佔儲存空間的大小。
基本類型 大小 最小值 最大值 封裝器類型
boolean - - - Boolean
char 6bit Unicode 0 Unic ode 2(16)-1 Character
byte 8bit -128 +127 Byte
short 16bit -2(15) 2(15)-1 Short
int 32bit -2(31) 2(31)-1 Integer
long 64bit -2(63) 2(63)-1 Long
float 32bit IEEE754 IEEE754 Float
double 64bit IEEE754 IEEE754 Double
void - - - Void
Java整型
| int |
4位元組(32位) |
-2147483648 ~ 2147483647 (正好超過20億) |
| short |
2位元組(16位) |
-32768 ~ 32767 |
| long |
8位元組(64位) |
-9223372036854775808 ~ 9223372036854774807 |
| byte |
1位元組(8位) |
-128 ~ 127 |
浮點類型