我的GitHub

我的博客

我的微信

我的邮箱

bqt20094

baiqiantao@sina.com

目录

Java中boolean类型占用多少个字节

为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这个类型,boolean类型在编译后会使用其他数据类型来表示。

那 boolean 类型究竟占用多少个字节?

带着疑问,随便网上一搜,答案五花八门,基本有以下几种:

1个bit(1位)

理由是 boolean 类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中只需要1个bit(1位)即可存储。

位是计算机最小的存储单位。

1个Byte(1字节,8位)

理由是虽然编译后1和0只需占用1位空间,但计算机处理数据的最小单位是1个字节,1个字节等于8位。

实际存储的空间是:用1个字节的最低位存储,其他7位用0填补,如果值是true的话则存储的二进制为:0000 0001,如果是false的话则存储的二进制为:0000 0000。

4个Byte(4字节,32位)

理由来源是《Java虚拟机规范》一书中的描述:

虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位。

简单来说就是,在编译之后:

boolean类型会使用int类型来代替,所以1个boolean类型变量使用了4个字节(32位)

boolean数组会使用byte数组来代替,所以1个boolean类型元素在数组中使用了1个字节(8位)

分析

显然第三条是更准确的说法,那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗?

大多数人都会很自然的这样去想,我同样也有这个疑问,经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的软件层面的32/64位系统,而是指CPU硬件层面的设计),具有高效存取的特点。

官方文档中的描述

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个字节都是有可能的。

这其实是运算效率和存储空间之间的博弈,两者都非常的重要。

2019-08-31

java boolean 大小_Java 中 boolean 类型占用多少个字节 [MD]相关推荐

  1. java中boolean方法_java中boolean类型怎么用?

    boolean类型的用法是java中的布尔型[逻辑型]数据类型,在java中boolean值只能是true和false,而不能用0和1代替,并且一定要小写,代码为[var myBoolean = ne ...

  2. java long类型大小_java中long类型占多少字节

    所谓的占用字节数 就是申请内存的时候所占的空间大小. long 8字节 最小值是 -9,223,372,036,854,775,808(-2^63): 最大值是 9,223,372,036,854,7 ...

  3. java boolean 语法_java中boolean的用法

    展开全部 boolean是java中的布尔型(逻辑型)数据类型,在java中boolean值只能是true和false,而不能e68a84e8a2ad62616964757a686964616f313 ...

  4. java 减少内存_java中减少内存占用小技巧

    Java做的系统给人的印象是什么?占内存!说道这句话就会有N多人站出来为java辩护,并举出一堆的性能测试报告来证明这一点. 其实从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存,那 ...

  5. java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述

    阅读: 877 密钥库是用于存储加密密钥和证书的存储工具 ,最常用于SSL通信,以证明服务器和客户端的身份.密钥库可以是文件或硬件设备.有三种类型的条目可以存储在密钥库中,取决于密钥库的类型,这三种类 ...

  6. java中long比较大小_java中Long类型比较大小和long类型的比较大小java中Long类型比较大小和long类型的比较大小...

    今天遇到这样一个问题,我用 "=="来比较两个Long类型的数据,明明数值都相等,可是结果就是false 这要说到==和 equals 的区别了. 1. ==比较的是两个对象在内存 ...

  7. java set类_java中set类型集合解析(一)

    集合的体系: -----------------Collection  单例集合接口 ----------------------List 如果实现的是List接口的集合,具备有序,可重复的特性 -- ...

  8. java map大小_Java中HashMap的size()方法: HashMap.size() - Break易站

    Java中的HashMap HashMap类的java.util.HashMap.size()方法用于获取哈希映射HashMap中映射的大小,该映射引用Map中键值对或映射的数量. 句法: Hash_ ...

  9. java cpu高_Java中的CPU占用高和内存占用高的问题排查

    下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...

  10. java byte大小_Java中byte大小格式化

    方法一 public static String readableFileSize(long size) { if (size <= 0) return "0"; final ...

最新文章

  1. python工程师是什么专业-猎维科技告诉你人工智能工程师与Python工程师有什么区别?...
  2. android 组件(activity,service,content provider,broadcast receiver,intent)详解
  3. 牛逼轰轰!GitHub 上 Star 量最高的 5 个机器学习项目
  4. cad常用字体包_水利设计CAD基础篇(一)
  5. 一个使用指针的简单程序
  6. MySQL单机多实例部署详解之------多实例分别定义不同的配置文件
  7. Fedora最小化安装后没有ifconfig命令
  8. element ui 表格中的渲染有多个状态判断的情况
  9. 同步异步与阻塞非阻塞
  10. 金蝶EAS,序时簿ListUI只允许选择一行或至少选择一行记录
  11. 如何判断你是合格的高级iOS开发工程师?
  12. Pycharm安装、使用的一些操作
  13. vscode登陆中国版leetcode
  14. ICDE‘22推荐系统论文之Research篇
  15. 看完全都会了!最新Java高级面试题汇
  16. 《Django By Example》读书笔记 02
  17. oracle中in与exists,Oracle中in和exists的区别
  18. SAP中国研究院总裁芮祥麟:从千里马到伯乐
  19. 搜索编程的艺术之C#实现微信小程序包解密
  20. adb打开网页_adb 常用命令

热门文章

  1. 6D姿态估计算法汇总(上)
  2. ValueError: Cannot feed value of shape (784,) for Tensor 'Placeholder:0', which has shape '(?, 784)'
  3. leetcode之字符串中的第一个唯一字符
  4. nginx限制并发连接数和连接请求数
  5. android 之 Dialog
  6. Oracle Sequence创建与使用
  7. win10升级后ctrl+shift+f失效了(zend studio)问题解决
  8. ScrollView和listview的冲突问题,关于宽度,和滑动
  9. 微软向开源社区开绿灯 开放Web服务规范专利[转载]
  10. 读取图像中任意点的像素值