Java中boolean类型占⽤多少个字节?
Java培训教程系列之Java中boolean类型占⽤多少个字节-威哥原创系列⽂章:
⾸先在Java中定义的⼋种基本数据类型中,除了其它七种类型都有明确的内存占⽤字节数外,就boolean类型没有给出具体的占⽤字节数,因为对虚拟机来说根本就不存在 boolean 这个类型,boolean类型在编译后会使⽤其他数据类型来表示,那boolean类型究竟占⽤多少个字节?带着疑问,随便⽹上⼀搜,答案五花⼋⻔,基本有以下⼏种:
1、1个bit
理由是boolean类型的值只有true和false两种逻辑值,在编译后会使⽤1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最⼩的存储单位。
2、1个字节
理由是虽然编译后1和0只需占⽤1位空间,但计算机处理数据的最⼩单位是1个字节,1个字节等于8位,实际存储的空间是:⽤1个字节的最低位存储,其他7位⽤0填补,如果值是true的话则存储的⼆进制为:0000 0001,如果是false的话则存储的⼆进制为:0000 0000。
3、4个字节
理由来源是《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硬件层⾯),具有⾼效存取的特点。
最后的总结:
根据http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html官⽅⽂档的
描述:
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类型没有给出精确的定义,《Java虚拟机规范》给出了4个字节,和
boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是运算效率和存储空间之间的博弈,两者都⾮常的重要。
以上就是Java培训教程小编为大家分享的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。
猜你喜欢LIKE
相关推荐HOT
更多>>java两个日期比较相差多少天
在Java中,可以使用`java.time`包下的类来比较两个日期之间相差的天数。以下是一个示例代码:importjava.time.LocalDate;importjava.time.tempo...详情>>
2023-06-27 17:19:00find命令查找文件
"find"命令是在Unix、Linux和类似系统中使用的一个非常强大的命令,用于在文件系统中查找文件和目录。它可以根据各种条件进行搜索,并提供了灵...详情>>
2023-06-16 14:00:30如何添加Java环境变量
要添加Java环境变量,请按照以下步骤进行操作:1.打开计算机的控制面板。2.点击"系统和安全"(Windows10及更高版本)或"系统"(Windows7和较早版本...详情>>
2023-06-08 09:31:10随机函数rand怎么使用
rand是一个C++的函数,用于产生一个随机数。以下是使用rand的方法:1.头文件:需要包含stdlib.h或cstdlib头文件以使用rand函数。2.使用rand()函...详情>>
2023-04-20 15:47:10什么是面向对象编程?面向对象有什么特性
面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它将数据和操作数据的方法组合成一个单独的实体,称为“对象”,并且对...详情>>
2023-03-17 15:30:11Java培训问答更多>>
新Java行业疑惑解答:Java的内存管理是如何工作的?
新java script是什么?为什么要学java script
新java和大数据哪个好?未来哪个职业发展更好
新java培训班多久能学会?培训周期大概多久
新java script和java的区别有哪些?如何区分
新java script的数据类型主要有哪些?怎样学的更快
新c语言与java区别在哪里?去培训机构学哪个比较好
Java面试题库 更多>>
华为外包java面试题-Java实现单链表的逆序
Java程序员面试题
Java面试题及答案
什么是线程的上下文切换?
如何撤销已经推送(push)到远端仓库的提交(commit)信息?
你了解哪些加密算法?
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区