基本数据类型
类型 | 字节 | 包装类 |
---|---|---|
boolean | 1 | Boolean |
byte | 1 | Byte |
short | 2 | Short |
char | 2 | Char |
int | 4 | Integer |
float | 4 | Float |
long | 8 | Long |
double | 8 | Double |
java虚拟机中boolean的字节数没有明确规定.
boolean数组中一个boolean使用的是一个字节
单独的boolean变量使用的是四个字节。
理由来源是《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。显然第三条是更准确的说法,那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗。大多数人都会很自然的这样去想,我同样也有这个疑问,经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。
long和double允许使用将64位数据分割成32/32.但是商用java虚拟机中一般不会出现。
自动装箱
自动装箱: 基本类型–》包装类
自动拆箱: 包装类–》基本类型
自动转换过程在编译阶段,