java boolean几个字节_Java中boolean类型到底占用多少个字节?
1.时间:2017-07-03 07:37:06YuanMxy
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个字节都是有可能的。
注:谢各位大神的各种见解。
java boolean几个字节_Java中boolean类型到底占用多少个字节?相关推荐
- java long 几个字节_java中long类型占多少字节
所谓的占用字节数 就是申请内存的时候所占的空间大小. long 8字节 最小值是 -9,223,372,036,854,775,808(-2^63): 最大值是 9,223,372,036,854,7 ...
- java 调用枚举种方法_Java中枚举类型的一种使用方式
今天改同事的代码发现同事的代码中有大量的if else语句.很不美观而且可读性太差. 因为需要给前端一个key,value的列表.这个列表写死.然而同事的代码. 放几张图,大家自己感受.我都不知道以后 ...
- java包是什么意思_java中的“包”到底是什么意思?
Java包的概念 为了更好的组织类,Java提供了包机制.包是类的容器,用于分隔类名空间.如果没有指定包名,所有示例都属于一个默认的无名包.Java中的包一般包含相关的类.例如,所有关于车辆的类都可以 ...
- php整型占几个字节,转:int类型究竟占几个字节
最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节.后来,查了The C Programming language这本书,里面有一句话是这样的:Each co ...
- java long类型大小_java中long类型占多少字节
所谓的占用字节数 就是申请内存的时候所占的空间大小. long 8字节 最小值是 -9,223,372,036,854,775,808(-2^63): 最大值是 9,223,372,036,854,7 ...
- java中char是几个字节_Java中char占用几个字节
在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...
- java 字符 几个字节_java中字符串占几个字节
首先,char为Java的基本类型,基本类型所占的字节数是固定的,如int占4字节,double占8字节,这可以使得Java在不同的平台上所占类型固定,很好地保证了Java的可移植性.因此,Java中 ...
- java字符串字节_Java中字符串与byte数组之间的相互转换
前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...
- python中int占几个字节_Python中的整型占多少个字节?
说到计算机中的整型,相信很多人都会联想到32位整型(或者int),是程序员日常生活中用的最多的一种类型.32位整型顾名思义,占用32个位也就是4个字节,取值范围−2,147,483,648~ 2,14 ...
最新文章
- FFMPEG转码常用命令研究
- 微信接口调用 ---ACCESS_TOKEN
- Android studio | Android studio下SVN工具(APP版本管理工具)
- SAP Marketing Cloud功能简述(一)Contacts和Profiles
- redis watch multi exec 关系
- 【Java开发规范】hashCode 和 equals 的处理规则
- Windows移动开发(二)——闭关修炼
- 雷达、信号处理方向的理解
- SQLServer 2000个人版下载
- js layui跳转页面_js中实现页面跳转
- 初学STM32F205的库包搭建工程
- Excel永远不会消亡!
- wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
- 稳压管Ir、Izt、Izk、Izm释义
- GoDaddy域名解析 到 阿里云域名DNS
- 赛尔号周五几点服务器维护完,赛尔号手游几点刷新游戏 | 手游网游页游攻略大全...
- 2021年茶艺师(中级)考试及茶艺师(中级)实操考试视频
- Python计算机二级大题
- 抖音网页版登录入口在哪
- 一根网线实现电脑远程登录树莓派