java中boolean的位模式(变量值)?

时间:2010-01-17 17:09:19

标签: java

我们在java变量中知道的是具有指定类型的位持有者。对于基元,位表示数值。

例如。值为6的字节具有位模式00000110。

所以我想知道,因为布尔值也是一个原语,对于值为true和false的位模式是什么。

3 个答案:

答案 0 :(得分:6)

在字节码/ VM内部,布尔值表示为字节,位模式00000001为真,00000000为假。但是这些信息并没有像Java开发人员那样购买任何东西,因为你根本无法访问或以其他方式使用Java中的布尔值的数字重新定位,因为Java将它们严格地从数字中分离出来。

编辑:我刚刚再次抬起Java VM Spec,发现我的答案错了。与我之前所说的相反,布尔值在字节代码中存储为CONSTANT_Integer结构,这使得它们占用常量池中数据的4个字节,但由于常量池是统一的,因此任何类中最多可以有2个布尔条目。由于对常量池的引用总是2个字节宽,因此一个布尔数组在字节代码中每个条目占用2个字节。

答案 1 :(得分:3)

是的,正如斯卡弗曼所说:True是1而false是0。

但这并不重要,因为除非你查看程序之外的序列化数据,否则你不太可能在野外看到这些数据。

对于它的价值,常见的Java实现实际上将布尔值存储在整数大小的字段中,即它们在该单个信息位周围有31个零值的填充。一次访问32位比从4中抓取一个字节要快一点,比从一个字节中挖出一个字节要快得多。然而,这种优化使得布尔数组变得非常大。如果你需要处理很多很多位并且需要减少空间,那么最好使用BitSet

答案 2 :(得分:2)

如果我没有错,JVM规范并不强制要求如何在内部表示布尔值。内部如何表示值是特定于供应商的,对程序员来说无关紧要,因为这个细节对于在JVM上运行的程序是完全透明的。