首页 > 编程语言 >Java千问10:你知道Java语言boolean类型的变量到底占多大空间吗?

Java千问10:你知道Java语言boolean类型的变量到底占多大空间吗?

时间:2022-12-28 10:32:06浏览次数:55  
标签:10 存储 Java 千问 虚拟机 boolean 类型 字节

​我们都知道,Java语言中有个boolean类型。每个boolean类型的变量中存储的是一个true或者是false的逻辑值。那么存储这个逻辑值,需要多大的空间呢?从理论上来讲,存储这个逻辑值只需要1个位(bit)就可以了,很多教科书上谈到这个问题的时候,也说boolean类型的数据在内存中只占1个位。

但是稍微有点计算机常识的人都知道:计算机完成寻址操作的时候,是以字节为最小单位进行的。也就是说每次要读取内存中数据的时候,最小只能精确到1个字节,不能单独读取某个位上的信息。如果boolean类型的变量的值只占1个位,计算机每次读取到1个字节的信息,里面会包含8个boolean变量的值。计算机就不得不通过某种算法去确定这8个值中,哪一个才是我们要找的值。这样做显然非常不合理,因为要完成这个“8选1”的操作又会增加运算工作量。那么Java虚拟机到底是怎样存储boolean值呢?​

为了彻底说清楚这个问题,我们还要刨一刨老底。每次JDK出新版本的时候,Java官方都会发布一个对应版本的《虚拟机规范》。在《虚拟机规范》中,对boolean类型的存储有专门的解释,文中说到:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,(因此)每个boolean元素占8位”。​

按照这样的说法我们可以得知:boolean类型的数据如果单独使用,占4个字节的空间,而如果存储到boolean数组中,每个元素又只占1个字节。​

紧接着问题又来了:单独使用boolean类型数据的时候,为什么要用4个字节来存储呢?用1个或2个字节存储岂不是更节省空间吗?我们必须知道,当下大部分处理器都是32位的(不是操作系统的32位,而是指CPU硬件),把boolean型数据存储成4个字节(32位),存取效率是最高的。​

最后还会有小伙伴问:《虚拟机规范》中是这么规定的,但在实现虚拟机的时候,真是按这样的规定来执行吗?为了说清楚这个问题,我们又要科普一个小常识:世界上并非只有Oracle一家公司实现了Java虚拟机(JVM),也有其他厂商或机构会发布自己的Java虚拟机实现。这些厂商或机构在自己的虚拟机中,是否完全按照《规范》的规定来存储boolean型数据就不得而知了。他们会综合考虑运算效率与存储空间两方面的性能。

如果想系统学习Java编程可以点击这里观看我在本站的视频课程。


标签:10,存储,Java,千问,虚拟机,boolean,类型,字节
From: https://blog.51cto.com/mugexuetang/5973865

相关文章

  • JAVA在线看CAD图纸快速入门
    前言梦想云图开发包,支持所有DWG/CAD图纸的在线浏览、批注、坐标提取、对象选择、编辑等功能,下面讲解如何从零开始使用梦想云图开发包。在线演示网址1:​​梦想CAD控件_CAD看......
  • JAVA17使用JS ScriptEngine
    JAVA动态运算符判断要借用 js 当我写下下面代码ScriptEngineManagermanager=newScriptEngineManager();//创建脚本执行引擎Scrip......
  • Java千问05:Java语言中为byte和short类型变量赋值为啥会报错?
    咱们先来看一段很简单的Java代码这段代码非常简单,没有任何技术含量。但是,如果我们把这段代码改成下面的样子大家可以看到,我们只是用一个变量a代替了原来赋值表达式当中的常......
  • Java 提供给第三方使用接口方法
    前言相信有很多小伙伴,在日常的开发中都有遇到过需要调用第三方接口的需求吧,但是自己有没有写过接口提供给第三方使用呢,常规的都是我们调用别人的接口,但是自己需要开发接口提......
  • Java千问06:Java语言中最大的整数再加1等于多少?看完秒懂!
    ​已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么?一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程序能够通过编译,但在运行......
  • Java HashMap原理
    HashMap是Java中用于实现映射关系的一种数据结构。它允许将一个对象(称为键)映射到另一个对象(称为值)。当需要访问值时,可以使用键来查找值。HashMap的实现原理是使用散列函数......
  • Java千问07:你真的会用Java的int型变量吗?有些坑你真的不知道!
    ​我们在进行Java编程的时候,使用最频繁的数据类型基本上就是int型了。平时在使用这种数据类型的过程中,我们似乎也并没有感觉到有什么太多需要注意的地方,其实int类型的变量在......
  • Java千问08:关于Java语言复合赋值运算符的两个问题,快来瞧瞧!
    ​我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符。复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步是赋值。比......
  • JAVA代码审计_若依管理系统
    若依管理系统代码审计该项目使用Mybatis作为数据库持久化框架。全局搜索${、关注xxxmapper.xml文件寻找SQL注入。1)后台角色管理处SQL注入漏洞点“SysRoleMapper.x......
  • windows配置java17
    最近重置系统了,所有东西都得重装一遍。但是为了能继续撸树盖房子,java又是必不可少的,先把java搞回来再说。jdk下载地址https://www.oracle.com/java/technologies/javase......