首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这个类型,boolean类型在编译后会使用其他数据类型来表示,那boolean类型究竟占用多少个字节?带着疑问,随便网上一搜,答案五花八门,基本有以下几种:
1、1个bit
理由是boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中只需要1位(bit)即可存储,位是计算机最小的存储单位。
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位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。
显然第三条是更准确的说法,那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗。大多数人都会很自然的这样去想,我同样也有这个疑问,经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。
最后的总结:
根据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.
布尔类型:布尔数据类型只有两个可能的值:真和假。使用此数据类型为跟踪真/假条件的简单标记。这种数据类型就表示这一点信息,但是它的“大小”并不是精确定义的。
可以看出,boolean类型没有给出精确的定义,《Java虚拟机规范》给出了4个字节,和boolean数组1个字节的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是运算效率和存储空间之间的博弈,两者都非常的重要。
分享到:
相关推荐
在Java编程语言中,了解一个对象占用的内存字节数对于优化内存使用和理解程序性能至关重要。本篇文章将深入探讨如何计算Java对象占用的内存字节数,以及影响这一数值的因素。 首先,Java对象在堆内存中由四个部分...
对于基本类型的数组,例如boolean,每个boolean值在数组中占用1字节,但由于字节对齐,数组的总大小可能会被调整以满足8字节对齐规则。对于其他基本类型,如int,每个int占用4字节;对于double,每个double占用8字节...
Java字节流是一种用于处理字节数据的流处理机制,在Java中,字节流不包含边界数据的连续流,字节流是由字节组成的,Java里字符由两个字节组成。字节流是最基本的,它是按字节来处理二进制数据。 字节流基类有:字节...
* boolean:在 Java 虚拟机中,如果 boolean 变量单独使用,占用 4 个字节;如果 boolean 变量在数组或和其他变量一起使用,占用 1 个字节 * char:2 字节 包装类则是原始类型的对象表示形式,每种原始类型都对应着...
### Java中变量类型及其字节长度详解 #### 一、变量定义与分类 在Java编程语言中,**变量**是一个非常基础且重要的概念。简单来说,变量是一个由标识符定义的数据项,它主要包括三个组成部分:类型、名称以及值。...
### Java字节与字符 #### 一、字节流与字符流的概念 在Java的I/O包中,根据处理的数据类型不同,可以将流分为两大类:字节流和字符流。 - **字节流**:处理的是8位的数据单元,即字节,主要适用于处理二进制文件...
本文将详细对比C/C++和Java两种语言中的数据类型及其所占的字节数。 首先,我们来看C/C++的数据类型: 1. 整型: - Turbo C 中的 `int` 和 `short int` 都是2字节(16位),有符号的 `int` 范围是 -32768 到 ...
Java字节数组与常见类型转换工具,包括byte[] 与int long double float string boolean 等类型的相互转换。
7. boolean:占1个字节,默认值为false,封装类为Boolean。 8. char:占2个字节,默认值为'\u0000',封装类为Character。 标识符的命名规则 标识符的含义:是指在程序中,我们自己定义的内容,譬如,类的名字,...
### 常见Java中数据类型之间的转换 在Java编程语言中,数据类型的转换是非常常见的操作之一。通过数据类型转换,可以确保不同数据类型之间的兼容性,并满足特定场景下的需求。本文将详细介绍Java中常见的数据类型...
在Java开发中,经常会遇到需要处理不同编码格式的文件的情况。为了确保程序能够正确解析文件内容,必须先判断文件的编码格式。本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK编码,并提供一个示例代码。 ##...
10. 基本数据类型:Java中基本数据类型包括byte、short、int、long、float、double、boolean、char,对应于不同的数据和存储需求。 11. 数据类型的存储:不同的基本数据类型在内存中有不同的存储方式和大小。例如,...
答:Java 中的基本数据类型包括 byte、short、int、long、float、double、boolean、char 等,它们是 Java 语言的基本组成部分。 Java 测试是 Java 开发者必备的基础知识测试,通过 Java 测试可以了解自己的 Java ...
在Java中实现CRC16校验功能可以帮助开发者确保数据的完整性和一致性,尤其在文件传输、网络通信或者存储系统中。CRC16的基本原理是通过一个固定长度的校验和来验证数据是否在传输或处理过程中发生了错误。 CRC16的...
Java 语言中,字符类型使用 UNICODE 编码,一个字符在内存中占 2 字节空间。这使得 Java 能够使用 char 类型描述更多个类字符,包含英文字母、标点符号、汉字、日文、韩文等。 例如: ```java char ch1 = 'a'; char...
**2.1 各种数据类型分别占用多少字节?** Java中的基本数据类型的大小是固定的: - `byte`:1字节 - `short`:2字节 - `int`:4字节 - `long`:8字节 - `float`:4字节 - `double`:8字节 **2.2 下面语句有什么...
### Java语言特点 1. **简单易学**:Java语言的语法与C语言和C++...Java中的`boolean`类型虽然有自己的字面量`true`和`false`,但在JVM中,其操作会被编译为对`int`类型的处理,这一点在处理`boolean`数组时尤其明显。
Java有8种基本数据类型:整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。 3. **解释一下类和对象的概念。** 类是创建对象的模板或蓝图,包含数据(属性)和行为...
它们各自占用的字节数分别为:byte占1字节,short占2字节,int占4字节,long占8字节,float占4字节,double占8字节,char占2字节,boolean占1位(不是字节)。 关于String类,它是一个不可变类,由final修饰,因此...