Java中boolean到底佔幾位元組?
Java中boolean到底佔幾位元組?
這是一個看似簡單,實則深究能發現其中一二玄機的問題
讓我們來看一下官方文件中的說法
" boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined."
上面說的很清楚,boolean值只有true和false兩種,這個資料型別只代表1bit的資訊,但是它到底佔了多少空間,卻沒有嚴格的說法,也就是說,不論它的所佔空間是多少,只有1bit的資訊是有意義的
"In Oracle’s Java Virtual Machine implementation, boolean arrays in the Java programming language are encoded as Java Virtual Machine byte arrays, using 8 bits per boolean element."
在 Oracle 的 Java 虛擬機器實現中,Java 語言中的 boolean 陣列被編碼成 Java 虛擬機器的 byte 陣列,每個元素佔 8 位元。
"The Java Virtual Machine does directly support boolean arrays. Its newarray instruction (§newarray) enables creation of boolean arrays. Arrays of type boolean are accessed and modified using the byte array instructions baload and bastore (§baload, §bastore)."
Java 虛擬機器中雖然定義了 boolean 型別,但是支援是很有限的,沒有專門的虛擬機器指令。
同時在 Java 語言中,對 boolean 值的操作被替換成 int 資料型別。
再去看看 Java 虛擬機器規範上是怎麼寫的。
" Although the Java Virtual Machine defines a boolean type, it only provides very limited support for it. There are no Java Virtual Machine instructions solely dedicated to operations on boolean values. Instead, expressions in the Java programming language that operate on boolean values are compiled to use values of the Java Virtual Machine int data type."
“The Java Virtual Machine encodes boolean array components using 1 to represent true and 0 to represent false . Where Java programming language boolean values are mapped by compilers to values of Java Virtual Machine type int , the compilers must use the same encoding.”
Java 虛擬機器使用 1 表示 true ,0 表示 false 來編碼 boolean 陣列。
Java 語言的 boolean 值被編譯器對映成 Java 虛擬機器的 int 型別的時候,也是一樣的
到這裡,得出一個結論:
boolean到底佔幾個位元組,依賴於JVM
第一,無論Boolean佔用多少位元組,只有1bit的值是有意義的
第二,boolean 型別被編譯成 int 型別來使用,佔 4 個 byte 。
第三,在 Java 虛擬機器裡,1 表示 true ,0 表示 false 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2677032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java char 型別究竟佔幾個位元組?Java型別
- JAVA——一個漢字佔用多少位元組?Java
- Java陣列物件佔用多少個位元組?Java陣列物件
- Java 位元組碼Java
- Oracle中文漢字佔用位元組Oracle
- 【Java】JVM位元組碼分析JavaJVM
- JAVA動態位元組碼Java
- 卷向位元組碼-Java異常到底是怎麼被處理的?Java
- java 原始碼分析 —BooleanJava原始碼Boolean
- Java類轉位元組碼工具Java
- Java位元組碼指令表Java
- Java 位元組的常用封裝Java封裝
- 輕鬆看懂Java位元組碼Java
- utf-8字元所佔位元組數字元
- 1.iOS --佔用的位元組的總結iOS
- Java位元組碼增強技術Java
- java入門(字元流、位元組流)Java字元
- 例項分析理解Java位元組碼Java
- 在專案中應該使用Boolean還是使用boolean?Boolean
- Dalvik 和 Java 位元組碼的比較Java
- 學習 Java 之 位元組碼驗證Java
- Java緩衝輸出位元組流BufferedOutputStreamJava
- Java 動態性(4) – 位元組碼操作Java
- 從 Java 位元組碼到 ASM 實踐JavaASM
- 一個Java物件到底佔用多大記憶體?Java物件記憶體
- JDBC踩坑──`tinyint(1)`預設對應Java中的`Boolean`JDBCJavaBoolean
- Java基本資料型別記憶體佔用位元組大小,取值範圍和預設值Java資料型別記憶體
- js中的Boolean 的妙用JSBoolean
- GBase 8a中一個字元佔用位元組數說明字元
- JWebAssembly:Java 位元組碼到 WebAssembly 編譯器WebJava編譯
- JVM(四):深入分析Java位元組碼-下JVMJava
- JVM(三):深入分析Java位元組碼-上JVMJava
- 位元組流
- 位元組碼
- C語言列舉型別所佔位元組大小例項解析C語言型別
- 而UTF8中文佔用位元組是不同的,從而造成以上的錯誤
- Java的位元組碼和ABAP load的比較Java
- 從1+1=2來理解Java位元組碼Java