Java基本数据类型有哪些?他们分别占几个字节?为什么? 您所在的位置:网站首页 短消息的字数范围是多少字 Java基本数据类型有哪些?他们分别占几个字节?为什么?

Java基本数据类型有哪些?他们分别占几个字节?为什么?

2024-06-03 02:30| 来源: 网络整理| 查看: 265

Java的八种基本数据类型

我们都知道Java中有八种基本数据类型,其中四种整型,二种浮点型,一种字符型,一种布尔型,这些基本数据类型占多大空间如下图所示,那么他们为什么占这么多字节呢?

Java基本数据类型

它们为什么占这么多空间呢?

首先看一下官方文档的描述:

Java编程语言支持的八种原始数据类型是:

byte:byte数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(含)。的byte数据类型可以是在大型保存存储器有用 阵列,其中存储器的节省实际上重要的。它们也可以用于int限制其位置的地方,以澄清您的代码;变量范围有限的事实可以作为文档的一种形式。short:short数据类型是一个16位带符号的二进制补码整数。最小值为-32,768,最大值为32,767(含)。与一样byte,也适用相同的准则:在实际short需要节省内存的情况下,可以使用a来以大阵列保存内存。int:默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-231,最大值为231 -1。在Java SE 8和更高版本中,可以使用int数据类型表示无符号的32位整数,其最小值为0,最大值为2 32 -1。使用Integer类可将int数据类型用作无符号整数。有关更多信息,请参见“数字类”部分。像静态方法compareUnsigned,divideUnsigned等已被添加到 Integer类,以支持算术运算的无符号整数。long:long数据类型是64位二进制补码整数。带符号的long的最小值为-263,最大值为263 -1。在Java SE 8和更高版本中,可以使用long数据类型表示无符号的64位长,其最小值为0,最大值为2 64 -1。当您需要的值范围比所提供的宽时,请使用此数据类型int。该 Long班还包含方法,如compareUnsigned,divideUnsigned等长,以支持算术运算的无符号。float:float数据类型是单精度32位IEEE 754浮点。其值的范围超出了本文的讨论范围,但在Java语言规范的“ 浮点类型,格式和值”部分中进行了指定。与针对byte和的建议一样,如果您需要将内存保存在大的浮点数数组中short,请使用float(而不是double)。永远不要将这种数据类型用于精确值,例如货币。为此,您将需要使用 java.math.BigDecimal类。 数字和字符串覆盖BigDecimal以及Java平台提供的其他有用的类。double:double数据类型是双精度64位IEEE 754浮点数。其值的范围超出了本文的讨论范围,但在Java语言规范的“ 浮点类型,格式和值”部分中进行了指定。对于十进制值,此数据类型通常是默认选择。如上所述,永远不要将这种数据类型用于精确值,例如货币。布尔值:boolean数据类型只有两个可能的值:true和false。将此数据类型用于跟踪真/假条件的简单标志。这种数据类型代表一小部分信息,但是其“大小”并不是精确定义的。char:char数据类型是单个16位Unicode字符。它的最小值为’\u0000’(或0),最大值为’\uffff’(或65,535,包括端值)。

也就是说它们所占的字节数是由他们所包含值的大小所决定的:

char: Java编译器默认使用Unicode编码,因此2字节可以表示所有字符。 char类型就是一个单一的 16 位 Unicode 字符;所有char占16bit = 2字节。 byte: byte 数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是 -128(-27);最大值是 127(27 -1);因此byte占8bit = 1字节。 short: short 数据类型是 16 位、有符号的以二进制补码表示的整数; 最小值是 -32768(-2 15);最大值是 32767(2 15 - 1); 因此short占16bit = 2字节。 int: int 数据类型是32位、有符号的以二进制补码表示的整数; 最小值是 -2,147,483,648(-2 31);最大值是 2,147,483,647(2 31 - 1); 因此int占32bit = 4字节。 long: long 数据类型是 64 位、有符号的以二进制补码表示的整数; 最小值是 -9,223,372,036,854,775,808(-263); 最大值是 9,223,372,036,854,775,807(263 -1); 因此long占64bit = 8字节。 float: float 数据类型是单精度、32位、符合IEEE 754标准的浮点数; 因此float占32bit = 4字节。 double: double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数; 因此double占64bit = 8字节。 boolean: 从官方文档上可以看出Java规范中没有明确指出boolean的大小,那么它到底占几个字节呢?有一些几种说法:

boolean究竟占几个字节?

1、1个bit(1/8个字节): 由于boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位运算,仅需1位(bit)即可,位是计算机中最小的存储单位。 2、1个字节 虽然编译后1和0只需占有1位空间,但是由于计算机存储数据的最小单位是1个字节,因此boolean类型的值在实际存储的时候是用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个字节。

从《Java虚拟机规范》中我们看到,虚拟机使用int来代替boolean,这样岂不是更加浪费内存空间了吗?经过查阅资料发现,这是由于计算机CPU所造成的,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。

总结: boolean单个占4个字节,boolean数组1个字节,Java规范未明确定义,具体要看虚拟机,而虚拟机又要看处理器(CPU)。

参考: The Java™ Tutorials java中boolean类型到底占用多少个字节



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有