java boolean 大小_Java 中 boolean 类型占用多少个字节 [MD]
我的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]相关推荐
- java中boolean方法_java中boolean类型怎么用?
boolean类型的用法是java中的布尔型[逻辑型]数据类型,在java中boolean值只能是true和false,而不能用0和1代替,并且一定要小写,代码为[var myBoolean = ne ...
- java long类型大小_java中long类型占多少字节
所谓的占用字节数 就是申请内存的时候所占的空间大小. long 8字节 最小值是 -9,223,372,036,854,775,808(-2^63): 最大值是 9,223,372,036,854,7 ...
- java boolean 语法_java中boolean的用法
展开全部 boolean是java中的布尔型(逻辑型)数据类型,在java中boolean值只能是true和false,而不能e68a84e8a2ad62616964757a686964616f313 ...
- java 减少内存_java中减少内存占用小技巧
Java做的系统给人的印象是什么?占内存!说道这句话就会有N多人站出来为java辩护,并举出一堆的性能测试报告来证明这一点. 其实从理论上来讲java做的系统并不比其他语言开发出来的系统更占用内存,那 ...
- java jceks 密钥_Java中不同类型的密钥库(Keystore) – 概述
阅读: 877 密钥库是用于存储加密密钥和证书的存储工具 ,最常用于SSL通信,以证明服务器和客户端的身份.密钥库可以是文件或硬件设备.有三种类型的条目可以存储在密钥库中,取决于密钥库的类型,这三种类 ...
- java中long比较大小_java中Long类型比较大小和long类型的比较大小java中Long类型比较大小和long类型的比较大小...
今天遇到这样一个问题,我用 "=="来比较两个Long类型的数据,明明数值都相等,可是结果就是false 这要说到==和 equals 的区别了. 1. ==比较的是两个对象在内存 ...
- java set类_java中set类型集合解析(一)
集合的体系: -----------------Collection 单例集合接口 ----------------------List 如果实现的是List接口的集合,具备有序,可重复的特性 -- ...
- java map大小_Java中HashMap的size()方法: HashMap.size() - Break易站
Java中的HashMap HashMap类的java.util.HashMap.size()方法用于获取哈希映射HashMap中映射的大小,该映射引用Map中键值对或映射的数量. 句法: Hash_ ...
- java cpu高_Java中的CPU占用高和内存占用高的问题排查
下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...
- java byte大小_Java中byte大小格式化
方法一 public static String readableFileSize(long size) { if (size <= 0) return "0"; final ...
最新文章
- python工程师是什么专业-猎维科技告诉你人工智能工程师与Python工程师有什么区别?...
- android 组件(activity,service,content provider,broadcast receiver,intent)详解
- 牛逼轰轰!GitHub 上 Star 量最高的 5 个机器学习项目
- cad常用字体包_水利设计CAD基础篇(一)
- 一个使用指针的简单程序
- MySQL单机多实例部署详解之------多实例分别定义不同的配置文件
- Fedora最小化安装后没有ifconfig命令
- element ui 表格中的渲染有多个状态判断的情况
- 同步异步与阻塞非阻塞
- 金蝶EAS,序时簿ListUI只允许选择一行或至少选择一行记录
- 如何判断你是合格的高级iOS开发工程师?
- Pycharm安装、使用的一些操作
- vscode登陆中国版leetcode
- ICDE‘22推荐系统论文之Research篇
- 看完全都会了!最新Java高级面试题汇
- 《Django By Example》读书笔记 02
- oracle中in与exists,Oracle中in和exists的区别
- SAP中国研究院总裁芮祥麟:从千里马到伯乐
- 搜索编程的艺术之C#实现微信小程序包解密
- adb打开网页_adb 常用命令
热门文章
- 6D姿态估计算法汇总(上)
- ValueError: Cannot feed value of shape (784,) for Tensor 'Placeholder:0', which has shape '(?, 784)'
- leetcode之字符串中的第一个唯一字符
- nginx限制并发连接数和连接请求数
- android 之 Dialog
- Oracle Sequence创建与使用
- win10升级后ctrl+shift+f失效了(zend studio)问题解决
- ScrollView和listview的冲突问题,关于宽度,和滑动
- 微软向开源社区开绿灯 开放Web服务规范专利[转载]
- 读取图像中任意点的像素值