您好,登錄后才能下訂單哦!
boolean 數(shù)據(jù)類型 boolean 變量存儲為 8位(1 個字節(jié))的數(shù)值形式,但只能是 True 或是 False。boolean 變量的值顯示為 True 或 False(在使用 Print 的時候),或者 #TRUE# 或 #FALSE#(在使用 Write # 的時候)。使用關(guān)鍵字 True 與 False 可將 boolean 變量賦值為這兩個狀態(tài)中的一個。在java中boolean值只能是true和false,而不能用0和1代替,并且一定要小寫。boolean operate是指布爾運(yùn)算。
每個boolean類型的變量中存儲的是一個true或者是false的邏輯值。那么存儲這個邏輯值,需要多大的空間呢?從理論上來講,存儲這個邏輯值只需要1個位(bit)就可以了,很多教科書上談到這個問題的時候,也說boolean類型的數(shù)據(jù)在內(nèi)存中只占1個位。
但是稍微有點(diǎn)計(jì)算機(jī)常識的人都知道:計(jì)算機(jī)完成尋址操作的時候,是以字節(jié)為最小單位進(jìn)行的。也就是說每次要讀取內(nèi)存中數(shù)據(jù)的時候,最小只能精確到1個字節(jié),不能單獨(dú)讀取某個位上的信息。如果boolean類型的變量的值只占1個位,計(jì)算機(jī)每次讀取到1個字節(jié)的信息,里面會包含8個boolean變量的值。計(jì)算機(jī)就不得不通過某種算法去確定這8個值中,哪一個才是我們要找的值。這樣做顯然非常不合理,因?yàn)橐瓿蛇@個“8選1”的操作又會增加運(yùn)算工作量。那么Java虛擬機(jī)到底是怎樣存儲boolean值呢?
為了徹底說清楚這個問題,我們還要刨一刨老底。每次JDK出新版本的時候,Java官方都會發(fā)布一個對應(yīng)版本的《虛擬機(jī)規(guī)范》。在《虛擬機(jī)規(guī)范》中,對boolean類型的存儲有專門的解釋,文中說到:“雖然定義了boolean這種數(shù)據(jù)類型,但是只對它提供了非常有限的支持。在Java虛擬機(jī)中沒有任何供boolean值專用的字節(jié)碼指令,Java語言表達(dá)式所操作的boolean值,在編譯之后都使用Java虛擬機(jī)中的int數(shù)據(jù)類型來代替,而boolean數(shù)組將會被編碼成Java虛擬機(jī)的byte數(shù)組,(因此)每個boolean元素占8位”。
按照這樣的說法我們可以得知:boolean類型的數(shù)據(jù)如果單獨(dú)使用,占4個字節(jié)的空間,而如果存儲到boolean數(shù)組中,每個元素又只占1個字節(jié)。
緊接著問題又來了:單獨(dú)使用boolean類型數(shù)據(jù)的時候,為什么要用4個字節(jié)來存儲呢?用1個或2個字節(jié)存儲豈不是更節(jié)省空間嗎?我們必須知道,當(dāng)下大部分處理器都是32位的(不是操作系統(tǒng)的32位,而是指CPU硬件),把boolean型數(shù)據(jù)存儲成4個字節(jié)(32位),存取效率是最高的。
最后還會有小伙伴問:《虛擬機(jī)規(guī)范》中是這么規(guī)定的,但在實(shí)現(xiàn)虛擬機(jī)的時候,真是按這樣的規(guī)定來執(zhí)行嗎?為了說清楚這個問題,我們又要科普一個小常識:世界上并非只有Oracle一家公司實(shí)現(xiàn)了Java虛擬機(jī)(JVM),也有其他廠商或機(jī)構(gòu)會發(fā)布自己的Java虛擬機(jī)實(shí)現(xiàn)。這些廠商或機(jī)構(gòu)在自己的虛擬機(jī)中,是否完全按照《規(guī)范》的規(guī)定來存儲boolean型數(shù)據(jù)就不得而知了。他們會綜合考慮運(yùn)算效率與存儲空間兩方面的性能。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。