今天來分享一下 Java 中 8 種原始資料型別(Primitive Data Types),這 8 種資料型別可以分成以下四組:
byte
, short
, int
, long
float
, double
boolean
char
整數類的資料型別有 byte
, short
, int
, long
四種,彼此的差異在於佔用的記憶體位置大小不一樣,各自可以儲存不同大小的數值資料。
要理解彼此的大小關係,要先知道記憶體最小的計量單位為 1 Bit (位元) 且是以二進位儲存資料,1 Bit 代表二進位中的一位,可以儲存一個 1 或 0 的數值;但若需要表示數值 2 的話,就需要進位用 2 Bits 表示成 10,每一次的進位都可以想表示的數值數量都會變成兩倍,因此,可以推導出儲存的數值可以 2 的 n 次方來表示,n 為位元數。
而 一個byte
被定義為 8 bit,理論上可以儲存 2 的 8 次方 (256)大小的數字,但若考慮正負數的情況,其中一個位元需要拿來表示正負號,那還有7個位元應該可以存放正負128 (2的7次方)是嗎?
不是喔,還有 0 的存在且被歸屬在正數,所以會佔用正數的一個位置,故實際能儲存的數值範圍為 -128 至 127 ,可以發現到正數少了 1,。
那這裡我們推導出一個 byte 可以存放的數值範圍為:
其中,n 為擁有的位元數(bit),而正數的減一是因為 0 屬於正數。
接著,我們那就可以推算出其他整數類別可以存放的數值範圍,如下表:
資料型別 | 儲存大小 | 數值範圍 |
---|---|---|
byte | 1 byte | -128 ~ 127 |
short | 2 byte | -32,768 ~32767 |
int | 4 byte | -2,147,483,648 ~ 2,147,483,647 |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
選擇適當的整數資料類別,有助於管理記憶體的使用量,寫出更具效能的程式碼。
我自己使用的小心法是去記憶: 3 萬以內用 short, 會超過 21 億用 long,其他都用 int。
但需留意在使用 long 的時候,需要於數值結尾加上 “L” 。
// int
int myInt = 100000;
// long
long myLong = 20000000000L; // 加上 "L"
浮點數類有 float
與 double
兩類,主要差異在於佔用的儲存體大小以及小數位數的精準度
資料型別 | 儲存大小 | 數值範圍 |
---|---|---|
float | 4 byte | 精準度可達小數點下 6-7 位 |
double | 8 byte | 精準度可達小數點下 15 位 |
float 與 double 在指派值的時候,與 long 一樣要在數值結尾加上資料型別標記,float 為 "f" 而 double 為 "d"。
// float
float myNum = 3.21f; // 加上 "f"
// double
double myNum = 10.1592d; // 加上 "d"