程式在運行時,必須先將相關的資料載入至記憶體中執行,然而記憶體的空間是有限的,不同需求的資料必須配給它們不同長度的記憶體空間,而另一方面,配給適當的記憶體空間,也可以讓 CPU 在處理資料時更有效率,這就是為什麼您必須為不同資料使用不同的的資料型態( Data type )。
如果將資料比喻為生產材料的話,大樣的生產材料您必須使用大的箱子裝,小件的生產材料則使用小箱子裝,如果您分配大箱子裝小件的生產材料,不但浪費空間,運送這些箱子時還很麻煩。
在 Java 語言中有八種基本型態( Primitive Type ),可分作四個大類
在 Java 程式語言中共有四個整數基本型態,分別以 byte、short、int 和 long 四個關鍵字來識別。這些型態以不使用小數點的方式來儲存數字。
整數值有大有小,所以整數中才又區分有四種不同的資料型態,以儲存人的年齡為例,byte 的變數型態就可以滿足儲存的要求,因為 byte 型態的範圍已涵蓋了人們年齡的範圍。
表 4-1 表格列出所有整數型態、包含它們所使用的記憶體容量大小以及所有可能值的範圍。
型態 | 長度 | 範圍 | 範例 |
---|---|---|---|
byte | 8 bits | −27到27−1 (-128 到 127 共 256 個) | 2 -114 |
short | 16 bits |
−215到215−1 (-32,768 到 32767 共 65,535 個) | 2 -3,269 |
int | 32 bits |
−231到231−1 (-2,147,483,648 到 2,147,483,647 共 4,294,967,296 個) | 2 147,334,778 |
long | 64 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 |
重點提示
位元(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);
在撰寫整數值時,也可以使用 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 說明這兩個浮點數型態的資訊。
型態 | 長度 | 範例 |
---|---|---|
float | 32 bits | 99F -327,456,99.01F 4.2E6F(工程標記記為 4.2 * 106 ) |
double | 64 bits | -1111 2.1E12 999,701,327,456,99.999 |
當您在程式中寫下一個浮點數值,編譯器預設會配給 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 程式語言中: