App下載

Java基本數(shù)據(jù)類型,看這一篇就夠了!

猿友 2021-01-11 17:30:47 瀏覽數(shù) (3040)
反饋

相信學(xué)過Java的小伙伴們都知道,Java是強類型語言,所以Java對于數(shù)據(jù)類型的規(guī)范會相對嚴(yán)格。

它提供了八種基本類型(這里不講解Void)。其中六種數(shù)字類型(四個整數(shù)型(默認(rèn)是int 型),兩個浮點型(默認(rèn)是double 型)),一種字符類型,還有一種布爾型。

基礎(chǔ)

我們先來一點干貨??!

基本數(shù)據(jù)類型大小值域默認(rèn)值包裝器類型
boolean-true,falsefalseBoolean
char16 bit[0,216-1]‘\u0000’Character
byte8 bit[-128,127]0Byte
short16 bit[-215,215-1]0Short
int32 bit[-231,231-1]0Integer
long64 bit[-263,263-1]0LLong
float32 bit[-3.4E38,3.4E38]0.0FFloat
double64 bit[-1.8E308,1.8E308]0.0DDouble

如果掌握了這些要點,那說明基礎(chǔ)是不錯的,有興趣的話可以隨小編再深入了解一下??!

深入

數(shù)據(jù)類型在計算機語言里面,是對程序所處理數(shù)據(jù)的抽象,它存在的意義是為了方便虛擬機為不同的數(shù)據(jù)分配更合適的空間。所以,對數(shù)據(jù)類型的理解自然與虛擬機分不開。

在 Java 虛擬機規(guī)范中,boolean 類型則被映射成 int 類型。具體來說,“true”被映射為整數(shù) 1,而“false”被映射為整數(shù) 0。這個編碼規(guī)則約束了 Java 字節(jié)碼的具體實現(xiàn)。

Java 虛擬機規(guī)范同時也要求 Java 編譯器遵守這個編碼規(guī)則,并且用整數(shù)相關(guān)的字節(jié)碼來實現(xiàn)邏輯運算,以及基于 boolean 類型的條件跳轉(zhuǎn)。這樣一來,在編譯而成的 class 文件中,除了字段和傳入?yún)?shù)外,基本看不出 boolean 類型的痕跡了。

Java 的基本類型都有對應(yīng)的值域和默認(rèn)值。

可以看到,byte、short、int、long、float 以及 double 的值域依次擴大,而且前面的值域被后面的值域所包含。因此,從前面的基本類型轉(zhuǎn)換至后面的基本類型,無需強制轉(zhuǎn)換。另外一點值得注意的是,盡管他們的默認(rèn)值看起來不一樣,但在內(nèi)存中都是 0。

在這些基本類型中,boolean 和 char 是唯二的無符號類型。boolean 類型的取值范圍是 0 或者 1,char 類型的取值范圍則是 [0, 65535]。通常我們可以認(rèn)定 char 類型的值為非負(fù)數(shù),這種特性十分有用,比如說作為數(shù)組索引等。

數(shù)據(jù)存儲

Java 虛擬機每調(diào)用一個 Java 方法,便會創(chuàng)建一個棧幀。這種棧幀有兩個主要的組成部分,分別是局部變量區(qū),以及字節(jié)碼的操作數(shù)棧。

在 Java 虛擬機規(guī)范中,局部變量區(qū)等價于一個數(shù)組,并且可以用正整數(shù)作為索引。除了 long、double 值需要用兩個數(shù)組單元來存儲之外,其他基本類型以及引用類型的值均占用一個數(shù)組單元。也就是說,boolean、byte、char、short 這四種類型,在棧上占用的空間和 int 是一樣的,和引用類型也是一樣的。

因此,當(dāng)我們將一個 int 類型的值,存儲到這些類型的字段或數(shù)組時,相當(dāng)于做了一次隱式的掩碼操作。舉例來說,當(dāng)我們把 0xFFFFFFFF(-1)存儲到一個聲明為 char 類型的字段里時,由于該字段僅占兩字節(jié),所以高兩位的字節(jié)便會被截取掉,最終存入“\uFFFF”。

數(shù)據(jù)加載

Java 虛擬機的算數(shù)運算幾乎全部依賴于操作數(shù)棧。也就是說,我們需要將堆中的 boolean、byte、char 以及 short 加載到操作數(shù)棧上,而后將棧上的值當(dāng)成 int 類型來運算。

對于 boolean、char 這兩個無符號類型來說,加載伴隨著零擴展。舉例來說,char 的大小為兩個字節(jié),在加載時 char 的值會被復(fù)制到 int 類型的低二字節(jié),而高二字節(jié)則會用 0 來填充。

對于 byte、short 這兩個類型來說,加載伴隨著符號擴展。舉個例子,short 的大小為兩個字節(jié)。在加載時 short 的值同樣會被復(fù)制到 int 類型的低二字節(jié)。如果該 short 值為非負(fù)數(shù),即最高位為 0,那么該 int 類型的值的高二字節(jié)會用 0 來填充,否則用 1 來填充。

小結(jié)

基礎(chǔ)知識要掌握好,底層實現(xiàn)也需要有一定的認(rèn)識。了解虛擬機,有助于理解Java語言的一些性質(zhì),也有助于使用Java語言。

推薦閱讀:

Java:23天零基礎(chǔ)完全入門

深入解析Java面向?qū)ο?/a>

Java8編程開發(fā)入門


0 人點贊