[Java基础]Java中boolean类型到底占用多少个字节?

2023-11-06

1.时间:2017-07-03 07:37:06  YuanMxy

2.问题描述:今天在复习java基础的时候发现一小问题,Java中boolean类型到底占用多少个字节?

3.问题解答:

(1)什么是boolean类型,根据官方文档的描述(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.

布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义的。

也就是说,java规范中,没有明确指出boolean的大小。

(2)如果要分大小,那么到底占几个字节呢?通过搜查各类资料(借鉴了一些大神的内容),发现有以下3种说法:

1、1个bit(1/8个字节)
理由:boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储,位是计算机最小的存储单位。在传智播客java基础班中也有有此理由(复习时所参考的视频)。


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位”。也就是说JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。

如果认同第三条,那么存在问题:那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗。经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),32 位 CPU 使用 4 个字节是最为节省的,哪怕你是 1 个 bit 他也是占用 4 个字节。因为 CPU 寻址系统只能 32 位 32 位地寻址,具有高效存取的特点。

4、It depends on Java virtual machine.这取决于java虚拟机 。

总结:java规范中,没有明确指出boolean的大小。在《Java虚拟机规范》给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。

注:谢各位大神的各种见解。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Java基础]Java中boolean类型到底占用多少个字节? 的相关文章

随机推荐

  • python中16mod7_Python小白学习之路(十六)—【内置函数一】

    将68个内置函数按照其功能分为了10类 分别是 数学运算 7个 abs divmod max min pow round sum 类型转换 24个 bool int float complex str bytearray bytes mem
  • 现代C++之SFINAE应用(小工具编写)

    现代C 之SFINAE应用 小工具编写 0 导语 现在考虑这个输入 map
  • 【计算机毕业设计】-java家教系统视频教程-手把手教你制作

    很多大四同学苦于没有参考的毕设资料 或者下载的资料不全 代码有问题 数据有问题等等 造成毕设出现问题影响大学毕业 现在 免费提供项目源码和视频教程 让大家在短时间内可以完成自己的毕业设计 对于java方向的毕业设计题目选题 我们可以从技术点
  • java javax.mail包报错550 Mailbox not found or access denied

    java javax mail包报错550 Mailbox not found or access denied 报错信息如下所示 拦截异常信息 获取发送失败的邮箱地址 进行打印 未发送成功的邮箱地址进行重发 或者可以直接将无效的邮箱从数据
  • 输入2 个字符串S1 和S2,要求删除字符串S1 中出现的所有子串S2

    输入2 个字符串S1 和S2 要求删除字符串S1 中出现的所有子串S2 题目内容 输入2 个字符串S1 和S2 要求删除字符串S1 中出现的所有子串S2 即结果字符串中不能包含S2 提示 输入数据的设计使得不可能出现输出为空的情况 输入格式
  • 在本地wz-dev分支拉取远程dev总分支最新代码的流程

    文章目录 0 图片说明 1 在wz dev分支上进行git add 和git commit m 2 切换到dev分支 拉取代码 与本地wz dev代码进行合并 推送合并后的代码到远程dev分支 3 切换到wz dev分支 与dev分支合并
  • FastAPI从入门到实战(2)——Pydantic模型

    前面了解了一下python的类型提示 这里就接着记录一下Pydantic这个用来执行数据校验的库 而且FastAPI就是基于python的类型提示和Padantic实现的数据验证 简介 官网 https pydantic docs help
  • python anova_使用Python进行双向ANOVA的三种方法

    python anova In an earlier post I showed four different techniques that enables two way analysis of variance ANOVA using
  • VS2010调试-显示堆栈窗口

    以中断模式或运行模式显示 调用堆栈 窗口 在 调试 菜单中选择 窗口 然后单击 调用堆栈 或者 ALT 7 更改显示的可选信息 右击 调用堆栈 窗口 然后设置或清除 显示 lt 所需信息 gt 在 调用堆栈 窗口中显示非用户代码帧 右击 调
  • javascript Date format(js日期格式化)

    javascript Date format js日期格式化 方法一 对Date的扩展 将 Date 转化为指定格式的String 月 M 日 d 小时 h 分 m 秒 s 季度 q 可以用 1 2 个占位符 年 y 可以用 1 4 个占位
  • SAP 资产屏幕增强(AS01/AS02/AS03)

    导语 最新需要在资产屏幕上增加增强字段 效果图在最后 下面分享一下实现过程 一 在表中增强字段 本次增强的是 资产主数据 gt 源 中的字段 选择储存在ANLU表中 二 创建屏幕 在函数组XAIS中创建屏幕9001 在屏幕上绘制需要增强的字
  • webpack性能优化

    webpack性能优化 性能优化介绍 开发环境性能优化 生产环境性能优化 开发环境性能优化 HMR hot module replacement 开发环境下调试代码 source map oneOf 缓存 tree shaking 去除无用
  • 计算m个A,n个B可以组合成多少个不同排列的问题。---C语言

    计算m个A n个B可以组合成多少个不同排列的问题 例如计算3个A 2个B可以组成多少种排列 如 AAABB AABBA 根据题目 我们要计算出其排列组合的个数 需要先把组合中的各个字母拿出来 并且计算有多少个 然后根据个数 计算其排列组合的
  • 关于jqGrid的multiselect,multiboxonly,multikey

    今天又解决了个大难题 不知道用jqGrid的朋友遇到过没有 当我们设置multiselect为true时 选择任何的单元格 都会选中该行 万一设置了单元格编辑功能 岂不是每次都要取消选中的行 由于查看国内的网站 发现仅仅都是介绍了jqGri
  • ChatGPT的 6 个强势升级:重点是超强的文件上传和分析功能也来啦!

    发布会核心概览 前日凌晨 OpenAI在社交平台上宣布了一系列新功能 旨在提升用户体验 这6 个新功能包括 提示示例 回答建议 GPT 4默认选择 可分析上传多个文件 保持登录状态和键盘快捷键 其中 可分析上传多个文件的功能非常强大 结合最
  • Leecode392.判断子序列

    题目描述 给定字符串 s 和 t 判断 s 是否为 t 的子序列 字符串的一个子序列是原始字符串删除一些 也可以不删除 字符而不改变剩余字符相对位置形成的新字符串 例如 ace 是 abcde 的一个子序列 而 aec 不是 进阶 如果有大
  • MicroPython——将固件烧写到STM32开发板上

    博主是在 win10环境下 将MicroPython固件烧录到stm32F407开发板上 因为博主想学一波STM32F407 有python基础 但c语言基础一般 觉得学库函数觉得太过复杂 且以后方向可能不太搞嵌入式硬件 所以就用Mirco
  • Eclipse 快捷健

    查询 F3 全局 打开声明 Ctrl G 工作区中的声明 Ctrl shift G 查看变量或方法在工作区的引用 Ctrl Alt H Call Hierarchy 查找出该工程所有调用了该成员变量或方法 Ctrl H 打开搜索对话框 Ct
  • PyQt5 界面预览工具

    简介 一款为了预览PyQt5设计的UI界面而开发的工具 使用时需要结合PyCharm同时使用 下载 PyQt5界面预览工具 参数说明 使用配置 启动PyCharm 找到File gt Settings 打开 找到Tools gt Exter
  • [Java基础]Java中boolean类型到底占用多少个字节?

    1 时间 2017 07 03 07 37 06 YuanMxy 2 问题描述 今天在复习java基础的时候发现一小问题 Java中boolean类型到底占用多少个字节 3 问题解答 1 什么是boolean类型 根据官方文档的描述 htt