From Gossip@caterpillar

Java Gossip: 資 料型態

程式在執行的過程中,需要運算許多的資訊,也需要儲存許多的資訊,這些資訊可能是由使用者輸入、從檔案中取得,甚至是由網路上得到,在程式運行的過程中, 這些資訊透過「變數」(Variable)加以儲存,以便程式隨時取 用。

一個變數用來指向一個記憶體空間,資料就是儲存在這個空間中,使用變數名稱來取得資料相信會比使用記憶體位置來得方便;然而由於資料在儲存時所需要的容量 不一,不同的資料必須要配給不同的空間大小來儲存,在Java中對不同的資料區分有幾種不同的「資料型態」(Data type)。

在Java中基本的資料型態主要區分為「整數」(Integer)、「位元」(Byte)、「浮點數」(Float)、「字元」(Character)與 布林數(Boolean)幾種,而這幾種還可以細分,如下所示:

 整數

只儲存整數數值,可細分為「短整數」(short)(佔2個位元組)整數(int)(佔4個位元組)長整數(long)(佔8個位元組),長整數所佔的記憶體比整數來得多,可表示 的數值範圍也就較大,同樣的整數可表示的整數數值範圍也比短整數來得大。

位元

Java提供有byte資料型態,專門儲存位元資料,例如影像位元資 料,一個byte資料型態佔一個位元組,而必要的話,byte資料型態也可以用於儲存整數數值。

浮點數

主要用來儲存小數數值,也可以用來儲存範圍更大的整數,可分為浮點數(float) (佔4個位元組)倍精度浮點數(double)(佔8個位元組), 倍精度浮點數所使用的記憶體空間比浮點數來得多,可表示的數值範圍與精確度也比較大。

字元

用來儲存字元,Java的字元採Unicode編碼,其中前128個 字元編碼與ASCII編碼相容;每個字元資料型態佔兩個位元組,可儲存的字元範圍由\ u0000到\uFFFF,由於Java的字元採用Unicode編碼,一個中文字與一個英文字母在Java中同樣都是用一個字元來表示。

布林數

佔記憶體2個位元組,可儲存truefalse兩 個數值,分別表示邏輯的「真」與「假」。


因為每種資料型態所佔有的記憶體大小不同,因而可以儲存的數值範圍也就不同,例如整數int的記憶體空間是4個位元組,所以它可以儲存的整數範圍為- 2147483648至2147483647,如果儲存值超出這個範圍的話稱之為「溢 值」(Overflow),會造成程式不可預期的結果,您可以使用下面這個程式獲得數值的儲存範圍:

  • DataTypeMaxMin.java
public class DataTypeMaxMin { 
public static void main(String[] args) {
System.out.printf("short range: %d ~ %d\n",
Short.MAX_VALUE,
Short.MIN_VALUE);
System.out.printf("int range: %d ~ %d\n",
Integer.MAX_VALUE,
Integer.MIN_VALUE);
System.out.printf("long range: %d ~ %d\n",
Long.MAX_VALUE,
Long.MIN_VALUE);
System.out.printf("byte range: %d ~ %d\n",
Byte.MAX_VALUE,
Byte.MIN_VALUE);
System.out.printf("float range: %e ~ %e\n",
Float.MAX_VALUE,
Float.MIN_VALUE);
System.out.printf("double range: %e ~ %e\n",
Double.MAX_VALUE,
Double.MIN_VALUE);
}
}

其中Byte、Integer、Long、Float、Double都 是java.lang套件下的類別名稱,而 MAX_VALUEMIN_VALUE則是各類別中所定義的靜態常數成員,分別表示該資料型態可儲 存的數值最大與最小範圍,%e表示用科學記號顯示,執行結果如下所示:
short range: 32767 ~ -32768
int range: 2147483647 ~ -2147483648
long range: 9223372036854775807 ~ -9223372036854775808
byte range: 127 ~ -128
float range: 3.402823e+38 ~ 1.401298e-45
double range: 1.797693e+308 ~ 4.900000e-324


其中浮點數所取得是正數的最大與最小範圍,加上負號即為負數的最大與最小範圍。