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类型到底占用多少个字节?相关推荐

  1. java long 几个字节_java中long类型占多少字节

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

  2. java 调用枚举种方法_Java中枚举类型的一种使用方式

    今天改同事的代码发现同事的代码中有大量的if else语句.很不美观而且可读性太差. 因为需要给前端一个key,value的列表.这个列表写死.然而同事的代码. 放几张图,大家自己感受.我都不知道以后 ...

  3. java包是什么意思_java中的“包”到底是什么意思?

    Java包的概念 为了更好的组织类,Java提供了包机制.包是类的容器,用于分隔类名空间.如果没有指定包名,所有示例都属于一个默认的无名包.Java中的包一般包含相关的类.例如,所有关于车辆的类都可以 ...

  4. php整型占几个字节,转:int类型究竟占几个字节

    最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节.后来,查了The C Programming language这本书,里面有一句话是这样的:Each co ...

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

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

  6. java中char是几个字节_Java中char占用几个字节

    在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...

  7. java 字符 几个字节_java中字符串占几个字节

    首先,char为Java的基本类型,基本类型所占的字节数是固定的,如int占4字节,double占8字节,这可以使得Java在不同的平台上所占类型固定,很好地保证了Java的可移植性.因此,Java中 ...

  8. java字符串字节_Java中字符串与byte数组之间的相互转换

    前言 Java与其他语言编写的程序进行tcp/ip socket通讯时,通讯内容一般都转换成byte数组型,java在字符与数组转换也是非常方便的.下面跟我一起来了解一下字符串与byte之间转换的原理 ...

  9. python中int占几个字节_Python中的整型占多少个字节?

    说到计算机中的整型,相信很多人都会联想到32位整型(或者int),是程序员日常生活中用的最多的一种类型.32位整型顾名思义,占用32个位也就是4个字节,取值范围−2,147,483,648~ 2,14 ...

最新文章

  1. FFMPEG转码常用命令研究
  2. 微信接口调用 ---ACCESS_TOKEN
  3. Android studio | Android studio下SVN工具(APP版本管理工具)
  4. SAP Marketing Cloud功能简述(一)Contacts和Profiles
  5. redis watch multi exec 关系
  6. 【Java开发规范】hashCode 和 equals 的处理规则
  7. Windows移动开发(二)——闭关修炼
  8. 雷达、信号处理方向的理解
  9. SQLServer 2000个人版下载
  10. js layui跳转页面_js中实现页面跳转
  11. 初学STM32F205的库包搭建工程
  12. Excel永远不会消亡!
  13. wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  14. 稳压管Ir、Izt、Izk、Izm释义
  15. GoDaddy域名解析 到 阿里云域名DNS
  16. 赛尔号周五几点服务器维护完,赛尔号手游几点刷新游戏 | 手游网游页游攻略大全...
  17. 2021年茶艺师(中级)考试及茶艺师(中级)实操考试视频
  18. Python计算机二级大题
  19. 抖音网页版登录入口在哪
  20. 一根网线实现电脑远程登录树莓派

热门文章

  1. Pytorch可视化工具tensorboardX(安装不踩坑)
  2. 一名大神的github
  3. Hardware Error 内存报错
  4. Maven2整合集成IntelliJ IDEA创建Web项目
  5. rabbitmq Centos6.8安装及基础命令
  6. mysql返回记录的ROWNUM(转)
  7. H极大值—lhMorpHMax
  8. escape sequence
  9. 如何在数字前面填充0,在股票代码前面补上0的三种方法
  10. 【题解】Luogu P1533 可怜的狗狗