作者: 許裕永
用基本資料型別所宣告的變數,與用類別宣告的參考變數,儲存的內容不一樣。變數儲存的是值;參考變數儲存的是物件代號。變數只能儲存一個值,而這個值的運
算,一定要靠設計師一行一行的撰寫程式碼;參考變數儲存的物件代號,代表一個物件。物件中儲存著一個或一個以上的值,呼叫物件的方法,就可以針對這些值做
特定的運算。為了簡化程式設計師的工作,Java提供了相當多的類別。其中和8個基本資料型別相對應的類別,我們統稱為Wrapper Classes類別。這些類別 建構的物件,除了可以儲存基本資料型別的值,當然也可以呼叫方法,來執行特定的運算。除了簡化設計師的工作外,在進階的運算時,效率也比較好。所以 Java也一直增加這些類別的功能,希望設計師日後開發類別的時候,可以方便這些類別和基本資料型別的交替使用。
基本資料型別
|
Wrapper Classes中對應基本資料型別的類別的類別名稱 | 建構方法可以接受的參數型別 |
byte | Byte | byteString |
short | Short | shortString |
int | Integer | intString |
long | Long | longString |
float | Float | floatdouble String |
double | Double | doubleString |
char | Character | char |
boolean | Boolean | boolean String |
Integer i=new Integer(8);
Float f=new Float(8.0);
Boolean b=new Boolean(false);
Scanner s=new Scanner(System.in);
Integer i2=new Integer(s.next());
Integer i3=new Integer(s.nextInt());
雖然參考變數f的Float建構方法中的參數值8‧0是一個double的值,但這是合法的。因為Float有一個可以接受double值為參數的建構方法。參考變數i2及i3的建構方法,分別接受使用者輸入的字串及int值為參數。
例二:
Byte b=new Byte(3);
本敍述句會造成編譯錯誤,因為參數值3是int型別,而Byte類別的建構方法只接受byte型別的值,或String類別的物件。
例三:
Double d=new Double(3);
本敍述句合法,因為參數值3是int型別,而int型別會自動轉型為double型別後,再呼叫參數型別為double的建構方法。
方法一: xxx xxxValue()
運算結果:取得該物件xxx型別的值,xxx是基本資料型別的意思。例:intValue()或floatValue()。
Boolean | Character | Byte | Short | Integer | Long | Float | Double | |
booleanValue |
x
|
|||||||
charValue |
x
|
|||||||
byteValue |
x
|
x
|
x
|
x
|
x
|
x
|
||
shortValue |
x
|
x
|
x
|
x
|
x
|
x
|
||
intValue |
x
|
x
|
x
|
x
|
x
|
x
|
||
longValue |
x
|
x
|
x
|
x
|
x
|
x
|
||
floatValue |
x
|
x
|
x
|
x
|
x
|
x
|
||
doubleValue |
x
|
x
|
x
|
x
|
x
|
x
|
例一:
Double d=new Double(3.14);
float f=d.floatValue();
int i=d.intValue();
System.out.println(f);
System.out.println(i);
取得物件的值並轉換為指定的資料型別。
方法二:static xxx parseXxx(String s)
static xxx parseXxx(String s,int radix)
此方法屬於類別方法成員,可以用物件名稱呼叫,也可以用類別名稱呼叫。Wrappers類別中除了Character外,各類別均有宣告此方法。運算結果:將String物件的字串值轉換成xxx型別的值。若是整數可以用第二個參數指定進位方式。
特別要注意的是:此方法是轉換為基本資料型別的值,不是建構成物件。
例一:
boolean b=Boolean.parseBoolean("true");
boolean b2=Boolean.parseBoolean("TrUe");
boolean b3=Boolean.parseBoolean("Ture");
System.out.println(b);
System.out.println(b2);
System.out.println(b3);
用來轉換為布林值的字串值,沒有大小寫的區分。但只要不是true的大小寫組合,便一律轉換為false(例b3之值即為false)。
例二:
int i=Integer.parseInt("abc");
除了Boolean外的其他類別,若字串物件參數的內容與其資料型態不符,會產生執行時期的錯誤。
需要兩個參數的方法,其第二個參數用來指定轉換時的進位方式,2為2進位,8為8進位,16為16進位。只有四個整數類別才有宣告這個方法。
例一:
int i=Integer.parseInt("11");
int i2=Integer.parseInt("11",2);
int i3=Integer.parseInt("11",8);
int i4=Integer.parseInt("11",16);
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
列印的結果為:11 3 9 17。
方法三:static 類別名稱 valueOf(參數)
類別 | Boolean | Character | Byte | Short | Integer | Long | Float | Double |
參數樣式 | boolean String | char | byteString String,int |
shortString String,int |
intString String,int |
longString String,int |
floatString | doubleString |
運算結果:將參數值建構成本類別物件。
例一:
Boolean b=Boolean.valueOf("true");
Boolean b2=Boolean.valueOf("TrUe");
Boolean b3=Boolean.valueOf("abc");
System.out.println(b);
System.out.println(b2);
System.out.println(b3);
此方法的運算結果是建構該類別的物件,parseXxx的運算結果是基本資料型別的值。
例二:
Integer i=Integer.valueOf("11");
Integer i2=Integer.valueOf("11",2);
Integer i3=Integer.valueOf("11",8);
Integer i4=Integer.valueOf("11",16);
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
整數型態的類別,擁有可以指定進位方式的方法。
方法四:String toString()
static String toString(參數)
Wrappers中所有類別均有宣告這兩式的toString()。
運算結果:將物件本身的值建構成String物件,大部份用於輸出。或把參數值建構成String物件,大部份用來執行基本資料型別直接轉換為字串值,可以省略建構成物件的手續。
例一:
Double d=new Double(3.14159);
String s="半徑值:" + d.toString();
System.out.println(s);
d‧toString()取得d物件的值來建構字串物件,再與前面的字串物件串聯。
例二:
String s="半徑值:" + Double.toString(3.14159);
System.out.println(s);
用類別名稱呼叫類別方法,用參數值建構字串物件。
方法五:static String toBinaryString(參數)
static String toOctalString(參數)
static String toHexString(參數)
運算結果:把參數值以指定的進位方式建構成String物件。三個方法分別為2進位,8進位及16進位。但只有Integer及Long這兩個類別有宣告這三個方法。另外Double及Float有宣告16進位的方法。其他的類別都沒有宣告這三個方法中的任何一個方法。
例一:
System.out.println("2進位的123:" + Integer.toBinaryString(123));
System.out.println("8進位的123:" + Integer.toOctalString(123));
System.out.println("16進位的123:" + Integer.toHexString(123));
System.out.println("16進位的123.123:" + Double.toHexString(123.123));
非10進位的值,在SCJP5‧0的測驗中不考,讀者知道方法的功能即可,不必了解轉換方式。
例一:
Integer i=new Integer(3);
Integer i2=new Integer(3);
System.out.println(i==i2);
System.out.println(i.equals(i2));
列印:false true。
例二:
Integer i=new Integer(3);
Byte b=new Byte((byte)3);
System.out.println(i.equals(b));
兩個物件的值雖然都是3,但是因為兩個物件屬於不同類別,所以equals()比對的結果為false。請注意:不同類別的物件,可以用equals()做比對,並不會產生編譯錯誤,也不會產生執行時期錯誤,只是其比對結果一定是false。
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。