java虛擬機支持的原始數據類型包括運算類型、布爾類型和返回地址類型。運算類型包括整型和浮點型。
整型包括:
byte,8比特有正負的二進制整數,默認值是0;
short,16比特位有正負的二進制整數,默認值是0;
int,32比特位有正負的二進制整數,默認值是0;
long,16比特位有正負的二進制整數,默認值是0;
char,16比特位無符號整數表示基於多文種平臺的聯合碼的值,用utf-16編碼,默認值是null編碼點(\u0000)。
浮點類型包括:
float,其值是浮點值集的元素或在支持的地方是浮點擴展指數集的元素,默認值是正零
double,其值是雙精度值集的元素或在支持的地方是雙精度擴展指數的值集的元素,默認值是正零。
boolean類型的值編碼了事實值true和false,默認值是false。
在java虛擬機規範初版中並不認爲布爾類型是一個java虛擬機類型。然而布爾值在java虛擬機中有有限的支持。在java虛擬機規範第二版中用建立布爾類型來澄清這個問題。
返回地址類型值指向java虛擬機指令的操做碼。做爲原始類型,只有返回地址類型不直接與java編程語言類型關聯。
java
java虛擬機中整型類型的值域分別是:
byte,從-128(包含)到127(包含)(-2^7至2^7-1)
short,從-32768(包含)到32767(包含)(-2^15至2^15-1)
int, 從-214743648(包含)到214743647(包含)(-2^31至2^31-1)
long, 從- 9223372036854775808(包含)到214743647(包含)(-2^63至2^63-1)
char, 從0(包含)到65535(包含)(-2^0至2^16-1)編程
浮點類型包括float和double,它們與32bit單精度和64bit雙精度IEEE754格式值和在IEEE 標準中二進制浮點運算說明中的操做相關聯。
IEEE754標準不但包含正數和負數,還包含正負零,正負無窮大,一個特殊的不是數值類型值(如下簡寫爲「NaN」)。NaN值用來表示某些非法操做的結果好比0除以0。
每一個java虛擬機的實現都要支持兩個標準的浮點值集,分別爲浮點數值集合雙精度浮點數值集。此外,一個java虛擬機的實現可能在其中支持兩個中的一個或所有擴展指數浮點值集,稱之爲浮點擴展指數值集和雙精度擴展指數值集。在特定環境下這些擴展指數值集可能用來替代值集來表現浮點或雙精度類型的值。
任何有限非零的浮點值集所有能用s•m•2(e-N+1),s爲+1或-1,m是一個比2N小的正整數,e是一個從Emin=-(2k-1-2)至Emax=2k-1-1幷包含二者的一個整數,N和K是個依賴於值集的變量。許多值可以用多餘一種的這種形式來表達,好比:假設在值域中有一個值v可以在這種形式中使用s、m和e恰當值來表達,若是m是一個偶數,e小於2k-1,,咱們就可以使用m以及e增長1來一樣數值v的第二種表現形式。在這種形式的表達中若是m>=2N-1就稱之爲標準的,不然表達式稱之爲非標準的。若是一個值域中的值不可以用m>=2N-1的形式來表達,那麼這個值就被稱爲非標準值,由於它沒有標準的表現形式。
對於兩個必須和兩個可選浮點值集在參數N和K上的約束(還有由此推導的參數Emin和Emax)在表格2.1中進行了總結。
當一個或兩個擴展指數值集被實現支持時,每個被支持的擴展指數值集都有明確的獨立實現常量K,K的值按表2.1盡行約束;K值推導了Emin和Emax的值。
四個值中的任何一個不只包括賦與的有限非零值,還包含正零、負零、正無窮、負無窮和NaN五個值。請注意按表2.1中約束設計,每個浮點值集元素都是必然的,浮點數擴展指數值集、雙精度擴展指數值集也是同樣。一樣每一個雙精度值元素是必然的雙精度擴展指數值集也同樣。每一個擴展指數值集比相應的標準值集有更大範圍的指數值,可是沒有更多的精度。
浮點值集的元素是準確值,它可以用IEEE754標準中定義的單精度浮點格式表示,除了惟一的NaN值外(IEEE 754詳細說明224-2與NaN值的不一樣)。雙精度值集的元素是準確的值,它可以用IEEE 754標準中定義的雙精度格式表示,除了惟一的NaN值外(IEEE 754詳細說明253-2與NaN值的區別)。注意,然而浮點擴展指數和雙精度擴展指數數值集的元素並不能分別與IEEE 754中的單精度擴展和雙精度擴展格式對應。說明文檔並無要求浮點數集的詳細表示方法除了要求在class文件格式中浮點數表示的位置外。
浮點數、浮點數擴展指數、雙精度和雙精度擴展指數的值集都不是類型。java虛擬機用浮點數值集表示浮點數的實現一般都是正確作法;然而用雙精度浮點數值集做爲替代的實現也是被容許的。相似的,在java虛擬機的實現當中用雙精度值集表示雙精度一般是正確作法,然而在相關上下文中,用雙精度擴展指數的一個元素替代的實現也是被容許的。
除了NaN的值,浮點值集的值是有序的。當範圍從最小到最大時,它們分別是負無窮、負有限值、負零和正零、正有限值、正無窮。
浮點數的正零和負零比較起來是相等的,但還有其餘方法能夠區分它們;好比:用1.0除以0.0結果爲正無窮,用1.0除以-0.0結果爲負無窮。
NaN是無序的,因此不論其中一個或兩個都是NaN,它們的值比較和值測試結果都是false。特別是,一個與其自己相沖突值相等測試結果爲false,當且僅當值是NaN時。一個不相等值的測試結果爲true,若是任何一個值爲NaN。編程語言