現在我的電腦的配置愈來愈高,內存和硬盤的容量大小都是以G爲單位,而1G=1024M=1024*1024K=1024*1024*1024字節。不過在PC的早期發展階段,電腦的存儲空間倒是十分有限的,像2000年先後普遍使用的3.5寸軟盤,其存儲容量只有區區1.44M,當時流行的SDR內存容量也才32M和64M。因此早期的編程語言很注重節約存儲,給每一個變量分配內存都要精打細算,大環境如此,因而早在1996年誕生的Java語言也不例外,僅僅是處理整數和小數,就分紅了byte、short、int、long、float、double六種數字類型。下面簡要介紹一下這六種類型的數值表示範圍。
一、byte:字節型。該類型的變量只佔用一個字節大小,一個字節可表達八位的二進制數,由於八位的第一位是符號位,爲0時表示當前是正數,爲1時表示當前是負數,因此byte類型實際囊括的數值範圍是-128到127。其中00000000到01111111表示了0到127區間,而10000000到11111111表示了-128到-1區間。須要注意的是,Java使用補碼錶示二進制數,且正數的補碼與其原碼相同,但負數的補碼是在其反碼的末位加1(負數的反碼是正數)。所以假設某負數爲x,若令「x取反+1=10000000」,則求得「x=(10000000-1)再取反=01111111取反=10000000」,即x=-128;若令「x取反+1=11111111」,則求得「x=(11111111-1)再取反=11111110取反=00000001」,即x=-1。
二、short:短整型。該類型的變量佔用兩個字節大小,可表達的數值範圍是-32768到32767,即負2的15次方~2的15次方-1。
三、int:整型。該類型的變量佔用四個字節大小,可表達的數值範圍是-2147483648到2147483647,即負2的31次方~2的31次方-1。
四、long:長整型。該類型的變量佔用八個字節大小,可表達的數值範圍是-9223372036854775807到9223372036854775808,即負2的63次方~2的63次方-1。
五、float:浮點型,用來表示小數。該類型的變量佔用四個字節大小,它包括一個符號位、一個8位的指數和一個23位尾數,此時1+8+23=32位=4字節。浮點數的計算公式爲:正/負*(2的指數次方)*尾數,其中正/負由符號位決定,8位指數的表示範圍是-128到127,尾數表示一個介於1.0和2.0之間的小數。這樣float類型可表示的整數部分範圍橫跨正負3.402823乘以10的38次方,小數部分範圍低至1.401298乘以10的負45次方,雖然看起來浮點數的表示位數大大增長,可是有效數字只有6到7位,也就是說,開頭6到7位纔是精確的數字,後面的數字通通不許。
六、double:雙精度型,用來表示小數。該類型的變量佔用八個字節大小,它包括一個符號位、一個11位的指數和一個52位尾數,此時1+11+52=64位=8字節。double類型可表示的整數部分範圍橫跨正負1.797693乘以10的308次方,小數部分範圍低至4.9000000乘以10的負324次方,而且有效數字提升到了15到16位。跟double雙精度相比,float類型的有效位數明顯不夠,因而浮點數也被稱做單精度數。java
對於實際開發來講,byte和short類型可表達的整數範圍過小,同時如今電腦的存儲容量絕不在意幾個字節的差別,所以這兩個類型在Java編程中基本無用武之地。int類型能夠表示高達21億的整數,可以應付大部分的整數運算場景,故而Java編碼中的整數變量最常使用int類型。至於long類型可表示多達19位的十進制數,經常使用於int類型覆蓋不到的整數場合,好比世界人口數量80億必須經過long類型來存儲。小數計算方面,由於float類型的數字精度不夠準,因此小數變量更常使用double類型來處理。
有了這些基本的數值類型,就能聲明相應類型的變量了,聲明語句的格式爲「變量類型 變量名稱;」。若是在聲明變量之時就進行初始賦值,則聲明語句的格式爲「變量類型 變量名稱 = 具體的數值;」。下面是個聲明數值變量的代碼例子,其中包含了先聲明再賦值、以及聲明時即刻賦值的兩種狀況:編程
public class Basic { public static void main(String[] args) { int zhumulanma; // 先聲明變量 // 8844是2005年中國測量獲得的珠穆朗瑪峯巖面高度,8848是冰雪高度 zhumulanma = 8844; // 再對變量賦值 System.out.println("珠穆朗瑪峯的高度="+zhumulanma); double yuanzhoulv = 3.1415926; // 在聲明變量之時就進行初始賦值 System.out.println("圓周率="+yuanzhoulv); } }
上述代碼的運行結果以下圖所示。編程語言