Java中boolean类型占几个字节,你知道吗?

背景

最近在复盘Java基础知识,看到基础数据类型这一章节,有一张图片是这样的。

在这里插入图片描述
比较好奇,为什么其他类型都有字节标识,唯独boolean没有,不是只占用1bit ~ 1位的吗 ?

找答案

出处1 ~《疯狂Java讲义(3版)》

在这里插入图片描述
一个boolean类型占用8位 = 1字节

出处2 ~ Java官网

1 原始类型

Primitive Data Types

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的值,编译器必须使用相同的编码。

结论

  1. boolean类型被编译为int类型,等于是说JVM里占用字节和int完全一样,int是4个字节,于是boolean也是4字节
  2. boolean数组在Oracle的JVM中,编码为byte数组,每个boolean元素占用8位=1字节
  3. (待考证)boolean数组在非Oracle JVM里面,占用字节数也许不是1字节
  • 70
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值