Java基础

Java的基本数据类型

2019-03-07  本文已影响0人  my12

Java共有8种基本数据类型(四个整数型、两个浮点型、一个字符型、一个布尔型)

boolean byte char short int long float double
1字节 2字节 2字节 4字节 8字节 4字节 8字节

四个整型

byte

short

int

long

两个浮点型(不能用来表示精确值,如金融)

float

double(浮点数的默认类型是double)

一个字符型

char

一个布尔型

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个字节都是有可能的。这其实是运算效率和存储空间之间的博弈,两者都非常的重要

基本数据类型对应的包装类

数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

总结

所有字节数相对少的基本数据类型可以自动向字节数相对多的转换。byte、char、short会自动转成int型,long可以自动转成float或double,float可以自动转换成double

参考链接

菜鸟教程:http://www.runoob.com/java/java-basic-datatypes.html

简书:https://www.jianshu.com/p/2f663dc820d0

上一篇 下一篇

猜你喜欢

热点阅读