自從Java發佈以來,基本數據類型就是Java語言的一部分,分別是byte, short, int, long, char, float, double, boolean. 其中: 整型:byte, short, int, long 字元型:char 浮點型:float, double 布爾型:bo ...
自從Java發佈以來,基本數據類型就是Java語言的一部分,分別是byte, short, int, long, char, float, double, boolean.
其中:
整型:byte, short, int, long
字元型:char
浮點型:float, double
布爾型:boolean
在詳細介紹之前,先科普一下,Java中最小的計算單元為位元組,1位元組=8位(bit)。
一. 整型
Java中整型數據屬於有符號數,即第一個bit位為0表示正整數,第一個bit位為1表示負整數。在電腦中負數由補碼進行表示,那麼補碼如何計算呢?
補碼=源碼取反 + 1;
如:
22,在電腦中的表示為00010110,
-22,取反:11101001,加1:11101010
byte
byte屬於Java中的整型,長度為1位元組8bit,取值10000000(-128)到 01111111(127),變數初始化預設值為0,包裝類Byte
short
short屬於Java中的整型,長度為2位元組16bit,取值10000000 00000000(-32768)到 01111111 11111111(32767),變數初始化預設值為0,包裝類Short
int
int屬於Java中的整型,長度為4位元組32bit,取值-2^31 (-2,147,483,648)到 2^31-1(2,147,483,647),變數初始化預設值為0,包裝類Integer
long
long屬於Java中的整型,長度為8位元組64bit,取值-2^63 (-9,223,372,036,854,775,808)到 2^63-1(9,223,372,036,854,775,8087),變數初始化預設值為0或0L,包裝類Long
二. 浮點型
Java中浮點型數據無法由二進位直接表示,而是一種對於實數的近似數據表示法,它遵循IEEE 754標準
float
float屬於Java中的浮點型,也叫單精度浮點型,長度為4位元組32bit,變數初始化預設值0.0f,包裝類Float
1. float結構
包含三部分:符號位、指數位、尾數位
符號位(S) | 指數位(E) | 尾數位(M) | |
---|---|---|---|
長度 | 1bit | 8bit | 23bit |
說明 | 0表示正數,1表示負數 | 格式為![]() ![]() ![]() |
形式為1.M或0.M。其中當E=0時,取1.M,稱為正規形式,當E!= 0時,取0.M,稱為非正規形式 |
2. float取值
正規形式:
非正規形式:
根據上面公式很容易計算出float的取值範圍為:
(最小值,當符號位S取1,指數位E取255)
(最大值,當符號位S取0,指數位E取255)
能取到其間的近似數據。
註意:根據指數位和尾數位的取值不同,還有很多特殊情況,如NAN,正無窮,負無窮,但平時基本不會用到,這裡不再深入;同時由於是近似值,因此無法表示金額,表示金額建議使用BigDecimal
double
double屬於Java中的浮點型,也叫雙精度浮點型,長度為8位元組64bit,變數初始化預設值0.0d,包裝類Double
1. double結構
包含三部分:符號位、指數位、尾數位
符號位(S) | 指數位(E) | 尾數位(M) | |
---|---|---|---|
長度 | 1bit | 11bit | 52bit |
說明 | 0表示正數,1表示負數 | 格式為![]() ![]() ![]() |
形式為1.M或0.M。其中當E=0時,取1.M,稱為正規形式,當E!= 0時,取0.M,稱為非正規形式 |
2. double取值
正規形式:
非正規形式:
根據上面公式很容易計算出double的取值範圍為:
(最小值,當符號位S取1,指數位E取2047)
(最大值,當符號位S取0,指數位E取2047)
能取到其間的近似數據。
註意:根據指數位和尾數位的取值不同,還有很多特殊情況,如NAN,正無窮,負無窮,但平時基本不會用到,這裡不再深入;同時由於是近似值,因此無法表示金額,表示金額建議使用BigDecimal
三. 字元型
char
char屬於java中的字元型,占2位元組16bit,可以賦值單字元以及整型數值, 變數初始化無預設值,包裝類Character。
如:
char a = 'a';
char a = '中';
char a = 12; // 取值範圍0~65536,因為char類型在ASCII字元編碼中,有對應的數值,可直接做運算,輸出字元表中對應的字元
四. 布爾型
boolean
在JVM中並沒有提供boolean專用的位元組碼指令,而boolean類型數據在經過編譯後在JVM中會通過int類型來表示,此時boolean數據4位元組32位,而boolean數組將會被編碼成Java虛擬機的byte數組,此時每個boolean數據1位元組占8bit.
--Java虛擬機規範
僅有兩個值true, false,變數初始化預設值false