2012年3月29日 星期四

Java 基本資料型類別(primitive type)和外包類別(wrapper classes)

Java Programming在這篇網誌,主要是記下Java 裡基本資料型類別(primitive type),和外包類別(wrapper classes) 的分別。

基本資料型類別(primitive type),又稱為工具類別,例如char, int等,和外包類別(wrapper classes) Character, Integer是有分別的。



錯誤示範:
(例如通過char去調用Character裡的static method)
char a = 'a';
char capA = a.toUpperCase(a);

當做字串與數值的轉換的話,常常會將基本資料型類別(primitive type)包裝成外包類別(wrapper classes)
例如:


String str = "50";
Integer i = new Integer(str);
i = i-10;
System.out.println(i);    //結果會是40


使用外包類別代替基本資料型類別的缺點是在運算上會比較基本資料型類別慢一點。
另外,在進行比較時也要小心:
Character a=new Character('a');
Character bigA=new Character('A');
Character a2=new Character('a');
System.out.println("result a>A : "+(a>bigA));   //結果是true
System.out.println("result a==a2 : "+(a==a2));  //結果是false
System.out.println("result a==a2 : "+(a.equals(a2)));  //結果是true
問題就出在 a > bigA 的比較時,這兩個物件會先做 unboxing 成基本資料型類別 primitive type 再比較。但是在做 a==a2 的比較時,這兩個變數會被當成物件來處理,而不做 unboxing,結果就是 false,因為本身就是不同的 reference,如要進行時應使用equals()。

以下表列了Java的Primitive Type和對應的外包類別:

Primitive Type Size Minimum Value Maximum Value Wrapper Type
char 16-bit Unicode 0 Unicode 216-1 Character
byte 8-bit -128 +127 Byte
short 16-bit -215
(-32,768)
+215-1
(32,767)
Short
int 32-bit -231
(-2,147,483,648)
+231-1
(2,147,483,647)
Integer
long 64-bit -263
(-9,223,372,036,854,775,808)
+263-1
(9,223,372,036,854,775,807)
Long
float 32-bit 32-bit IEEE 754 floating-point numbers Float
double 64-bit 64-bit IEEE 754 floating-point numbers Double
boolean 1-bit true 或 false Boolean

0 意見:

張貼留言