Java中的基本数据类型占多少内存空间?
- byte: 8位 1字节
- char: 16位 2字节
- short 16位 2字节
- int 32位 4字节
- float: 32位 4字节
- long: 64位 8字节
- double: 64位 8字节
- boolean: 32位 4字节,在数组中时 8位 1字节
为什么boolean类型特殊?
为什么 boolean 类型在单独使用占4个字节,而存储到boolean数组中,每个元素只占1个字节.
在《虚拟机规范》中,对boolean类型的存储有专门的解释,文中说到:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,(因此)每个boolean元素占8位”。
主注: Oracle 的jdk按这个规范来,但是其他虚拟机版本不一定了,会综合考虑运算效率与储存空间两方面的性能.
为什么在编译之后boolean都使用Java虚拟机中的int数据类型来代替?
因为计算机完成寻址操作的时候,是以字节为最小单位进行的。也就是说每次要读取内存中数据的时候,最小只能精确到1个字节,不能单独读取某个位上的信息。如果boolean类型的变量的值只占1个位,计算机每次读取到1个字节的信息,里面会包含8个boolean变量的值
boolean 类型的总结:
- boolean 类型被编译成 int 类型来使用,占 4 个 byte (字节)。
- boolean 数组被编译成 byte 数组类型,每个 boolean 数组成员占 1 个 byte (字节)。
- 在 Java 虚拟机里,1 表示 true ,0 表示 false 。
- 这只是 Oracle Java 虚拟机的建议。