背景
最近在复盘Java基础知识,看到基础数据类型这一章节,有一张图片是这样的。
比较好奇,为什么其他类型都有字节标识,唯独boolean没有,不是只占用1bit ~ 1位的吗 ?
找答案
出处1 ~《疯狂Java讲义(3版)》
一个boolean类型占用8位 = 1字节
出处2 ~ Java官网
1 原始类型
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.
解释一下:
布尔数据类型只有两个可能的值:true和false。 将此数据类型用于跟踪真/假条件的简单标志。 此数据类型表示一位信息,但其“大小”不是精确定义的内容。
2 jdk 布尔类型
地址2:jdk specs文档
我对比了jdk8, jdk11 和 jdk12 对于boolean类型的说明是完全一样的,故只贴出jdk12的图
翻译一下:
虽然Java虚拟机定义了一个boolean类型,但它只为它提供了非常有限的支持。没有Java虚拟机指令专门用于对boolean值的操作。相反,Java编程语言中对boolean值进行操作的表达式被编译为使用Java虚拟机int数据类型的值。
Java虚拟机直接支持boolean数组。它的newarray指令可以创建boolean数组。使用byte数组指令baload和bastore访问和修改类型为boolean的数组。
在Oracle的Java虚拟机实现中,Java编程语言中的boolean数组被编码为Java虚拟机byte数组,每个布尔元素使用8位。
Java虚拟机使用1表示boolean数组组件的true,0表示false。其中Java编程语言布尔值由编译器映射到Java虚拟机类型int的值,编译器必须使用相同的编码。
结论
- boolean类型被编译为int类型,等于是说JVM里占用字节和int完全一样,int是4个字节,于是boolean也是4字节
2. boolean数组在Oracle的JVM中,编码为byte数组,每个boolean元素占用8位=1字节
3. (待考证)boolean数组在非Oracle JVM里面,占用字节数也许不是1字节引用原文
———————————————— 版权声明:本文为CSDN博主「HypocrisyC」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/amoscn/article/details/97377833