Java中boolean占用多少个字节

开头
这个标题的引入其实就是因为一件很搞笑的事。我今天在寝室写作业,突然听见室友的对话。大概如下:
室友a:哎,这个boolean到底是个什么东西哦?
室友b: 不是个东西(开玩笑)
室友a: 之前的我都学会了
室友b: 扯,我不信
室友a: 还是要打好基础啊
室友a:(查了网络)哦,原来boolean类型占一个字节啊
我当时听到这句话就心里觉得好搞笑哦,不过他们讲的是c++的boolean类型,我想的是java的,我当时就想boolean类型没有说占用多少个字节啊,在我影响中它就是true和false

废话不多说,看下文

这种概念性问题,最权威的就是查阅官网资料。Oracle官方已经在官网对基本数据类型,所占的字节数进行了说明,

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


但遗憾的是,官网唯独没有明确说明boolean类型占几个字节,原文如下:

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.


翻译过来,大致意思就是说:boolean类型的值有两个“真和假”。使用这个类型,可以用于简单的标记真/假的条件。这个类型可以表示一些信息,但它占用的字节大小并没有精确的定义。

接着下面

实际上,如果你接着google,这个问题还是会得到结论的。但也可以换个方式,看书。这个数据类型问题必然和java虚拟机有关,所以《Java虚拟机规范》一书中,其实也对这个问题进行过说明,以下是本书中相关的两个结论(不是原文,是对原文进行了提炼):

1.JVM没有提供booolean类型专用的字节码指令,而是使用int相关指令来代替。

2.对boolean数组的访问与修改,会共用byte数组的baload和bastore指令。

分析这两个结论,问题就解决了。




(1)上面的第1个结论是说:boolean在底层实际会调用int,那么既然int4个字节,boolean也自然占4个字节。即,boolean类型占4个字节。



(2)上面的第2个结论是说:boolean数组在底层会用到byte指令,那么既然byte占1个字节,boolean数组中的boolean也就占1个字节。即,boolean数组中的boolean占1个字节。



综上两点,得出最终结论:在符合JVM规范的虚拟机中,

如果boolean是单独使用:boolean占4个字节。

如果boolean是以“boolean数组”的形式使用:boolean占1个字节。



提示:以上结论是《Java虚拟机规范》一书给的,也就是说,仅仅适用于那些遵循了“规范”的JVM。换句话说,如果某个JVM没有遵循规范,boolean到底几个字节就又无法得知了。

链接:https://mp.weixin.qq.com/s?src=11&timestamp=1604890470&ver=2695&signature=i6WzS1SM598tEjjXq88xNu8TisOXhlPaDeyOz-YQ2-*qHOYneb7Qx2Xgne06PXRvXivjZnKR8nSZ8JcivmJ2hmHHk5UX6FGfYW1D5prjrmw2QS9Oj6FGeauR2J49xeZF&new=1

看完这个我是惊呆额我自己,我看来还是挺无知的。一开始我觉得搞笑,现在我笑不出来了。
革命尚未成功,同志仍需努力。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值