4-2 認識資料型態

程式在運行時,必須先將相關的資料載入至記憶體中執行,然而記憶體的空間是有限的,不同需求的資料必須配給它們不同長度的記憶體空間,而另一方面,配給適當的記憶體空間,也可以讓 CPU 在處理資料時更有效率,這就是為什麼您必須為不同資料使用不同的的資料型態( Data type )

如果將資料比喻為生產材料的話,大樣的生產材料您必須使用大的箱子裝,小件的生產材料則使用小箱子裝,如果您分配大箱子裝小件的生產材料,不但浪費空間,運送這些箱子時還很麻煩。

圖4-3、為資料分配適當的資料型態

在 Java 語言中有八種基本型態( Primitive Type ),可分作四個大類

  • 整數型態(Integral type)-byte、short、int 和 long
  • 浮點數型態(Floating point type)-float 和 double
  • 字元型態(Textual type)-char
  • 邏輯型態(Logical type)-boolean

• 整數基本型態

在 Java 程式語言中共有四個整數基本型態,分別以 byteshortintlong 四個關鍵字來識別。這些型態以不使用小數點的方式來儲存數字。

整數值有大有小,所以整數中才又區分有四種不同的資料型態,以儲存人的年齡為例,byte 的變數型態就可以滿足儲存的要求,因為 byte 型態的範圍已涵蓋了人們年齡的範圍。

表 4-1 表格列出所有整數型態、包含它們所使用的記憶體容量大小以及所有可能值的範圍。

型態長度範圍範例
byte8 bits−27到27−1
(-128 到 127 共 256 個)
2
-114
short16 bits −215到215−1
(-32,768 到 32767 共 65,535 個)
2
-3,269
int32 bits −231到231−1
(-2,147,483,648 到 2,147,483,647 共 4,294,967,296 個)
2
147,334,778
long64 bits −263到263−1
(-9,223,372,036,854,775,808 到 9,223,372,036,854,775,808
共 18,446,744,073,709,557,616 個)
2
-2,036,854,775,8
08L
1L
表 4-1 整數型態

重點提示

位元(bit)是記憶體計量的最基本單位,如果8個位元則稱為一個位元組(byte)。

直接在程式中寫下一個數值,該數值稱之為字面值(Literal value),編譯器會自動為該數值配給記憶體空間,以整數值為例,在一般情況下如果您寫下一個整數,編譯器將自動設定為 int 型態,除非您自行指定或是使用 L,例如寫下 10L的話,則編譯器會為該數值配給 long 型態的空間。

您可以直接將數值指定給標準輸出( Standard output ),在螢幕上顯示數值,例如:

System.out.println(10);
                            

但是如果您的程式中撰寫了以下的程式片段:

System.out.println(2036854775808);
                            

則您在編譯時會發生以下的錯誤訊息:

integer number too large: 2036854775808
        System.out.println(2036854775808);
                            ^
1 error
                            

之前說過,當您在程式中寫下一個整數值時,編譯器預設是配給 int 型態的記憶體空間,然而 2036854775808 已經超出了 int 型態的記憶體空間所能儲存的範圍,才會出現以上的錯誤訊息,簡單的說,您硬是要將大件貨物塞入小箱子中,當然就會有問題發生。

在撰寫整數時,可以用 L 加於整數之後,這是在告知編譯器:「請為這個數值配給 long 型態的記憶體空間」,如此才可以順利編譯,例如:

System.out.println(2036854775808L);
                            

圖4-4、有時需要告知編譯器資料型態的資訊

在撰寫整數值時,也可以使用 16 進位或 8 進位的方式來撰寫,以 16 進位撰寫時,開頭要寫 0x,例如寫作 0xFF(10進位即 255),以 8 進位方式撰寫時,開頭要寫 0,例如寫作 017(10 進位即 15),當使用標準輸出顯示在螢幕時,則都以 10 進位方式顯示,例如以下的程式碼片段會在螢幕上顯示 10 進位的 255 與 15:

System.out.println(0xFF);
System.out.println(017);
                            

• 浮點數基本型態

float 與 double 為浮點數的兩個型態。它們是用來儲存右邊有出現小數點的數值,如 12.24 或 3.14159,表 4-2 說明這兩個浮點數型態的資訊。

型態長度範例
float32 bits 99F
-327,456,99.01F
4.2E6F(工程標記記為 4.2 * 106 )
double64 bits-1111
2.1E12
999,701,327,456,99.999
表 4-2 浮點數型態

當您在程式中寫下一個浮點數值,編譯器預設會配給 double 型態的記憶體空間給該數值,如果您只打算配給浮點數 float 型態的記憶體空間,則必須使用 F 來指定,例如:

System.out.println(3.14F);
                            

重點提示

double 型態可以使用在需要更大範圍及準確性的情況下。

• 字元基本型態

另一個您必須儲存與運用的資料型態是單一字元資料。這個char 基本型態是用來儲存 16 bits 的單一字元,例如'Y'字元,在 Java 程式語言中,字元必須使用單引號括住,例如:

System.out.println('Y');
                            

char 型態並不會真正儲存像'Y'這樣的字元,而是將字元轉換成一連串的位元儲存。而位元與字元的對應是根據程式語言所使用的字元集所對照而成。

大多數的電腦語言都是使用 ASCII 碼(American Standard Code for Information Interchange),ASCII 是一個 8 位元的字元集,對所有的英文字元、標點符號、數字等都有所對應。

在 Java 程式語言中所使用的是 16 位元Unicode 碼,Unicode 能夠儲存在現今世界的各種語言中大部份必須顯示的字元。因此您可以用任何語言撰寫程式,程式就能夠正常地運作,並正確地顯示該語言。

為了與 ASCII 碼相容,Unicode 碼內包含有 ASCII 碼的子集合(前 128 個字元),例如您寫了一個'Y'字元,實際上該字元在 Java 中是以 00000000 00111011 的方式儲存,編碼數值是 59,對應 ASCII 編碼表的'Y'字元。

您可以在下列的網址中找到 ASCII 編碼表:http://www.lookuptables.com/

在 Java 中無論是中文字元或是英文字元,一律佔 16 bits 長度的記憶體空間,所以您也可以這麼顯示中文字元:

System.out.println('中');
                            

您也可以使用 Unicode 編碼的方式來指定字元,只要以\u開始並指定字元編碼即可,例如下面的程式片段會顯示 H、e、l、l、o 五個字元:

System.out.println('\u0048');
System.out.println('\u0065');
System.out.println('\u006C');
System.out.println('\u006C');
System.out.println('\u006F');
                            

• 邏輯基本型態

電腦程式最常執行的動作是做決策。決策的結果-不論是正確(true)或錯誤(false)-在 Java 中都能夠以 boolean 型態的數值來表示,在 Java 程式語言中:

  • boolean 型態有兩種數值 true 或 false
  • 應用於條件運算時,運算式的結果可為 true 或 false