Java中 boolean類型值到底占幾個字節的問題?


布爾類型定義

布爾數據類型只有兩個可能的值:真和假。使用此數據類型為跟蹤真/假條件的簡單標記。這種數據類型就表示這一點信息,但是它的“大小”並不是精確定義的。

也就是說,java規范中,沒有明確指出boolean的大小。

存在3種說法:

1、1個bit(1/8個字節)
理由:boolean類型的值只有true和false兩種邏輯值,在編譯后會使用1和0來表示,這兩個數在內存中按位算,僅需1位(bit)即可存儲,位是計算機最小的存儲單位。。


2、1個字節
理由:雖然編譯后1和0只需占用1位空間,但計算機處理數據的最小單位是1個字節,1個字節等於8位,實際存儲的空間是:用1個字節的最低位存儲,其他7位用0填補,如果值是true的話則存儲的二進制為:0000 0001,如果是false的話則存儲的二進制為:0000 0000。

3、4個字節
理由:在《Java虛擬機規范》一書中的描述:“雖然定義了boolean這種數據類型,但是只對它提供了非常有限的支持。在Java虛擬機中沒有任何供boolean值專用的字節碼指令,Java語言表達式所操作的boolean值,在編譯之后都使用Java虛擬機中的int數據類型來代替,而boolean數組將會被編碼成Java虛擬機的byte數組,每個元素boolean元素占8位”。也就是說JVM規范指出boolean當做int處理,也就是4字節,boolean數組當做byte數組處理,這樣我們可以得出boolean類型占了單獨使用是4個字節,在數組中是確定的1個字節。

如果認同第三條,那么存在問題:那虛擬機為什么要用int來代替boolean呢?為什么不用byte或short,這樣不是更節省內存空間嗎。經過查閱資料發現,使用int的原因是,對於當下32位的處理器(CPU)來說,一次處理數據是32位(這里不是指的是32/64位系統,而是指CPU硬件層面),32 位 CPU 使用 4 個字節是最為節省的,哪怕你是 1 個 bit 他也是占用 4 個字節。因為 CPU 尋址系統只能 32 位 32 位地尋址,具有高效存取的特點。

4、It depends on Java virtual machine.這取決於java虛擬機 。

總結:java規范中,沒有明確指出boolean的大小。在《Java虛擬機規范》給出了4個字節,和boolean數組1個字節的定義,具體還要看虛擬機實現是否按照規范來,所以1個字節、4個字節都是有可能的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM