Java基本数据类型

Java基本数据类型

在Java中共有八种基本数据类型如下表

类型 所占字节
char 2
boolean 4(1)
byte 1
short 2
int 4
long 8
float 4
double 8

可以把八种数据类型按照字符型、布尔型、数值型分为三组

字符型

char类型所占的字节数为2个字节,通过如下代码可以查看

System.out.println(Character.BYTES) // 2

1 字节 = 8 位,计算机存储的数据都以二进制来表示,所以char类型在计算机内表示为16位二进制

布尔型

boolean类型所占的字节数大小有两种情况

虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位 --《Java虚拟机规范》

所以单个boolean变量所占的是4个字节,boolean数组中的元素占一个字节。

数值型

整数型

整数型包括byte、short、int、long,最高位符号位表示正负。

byte

byte类型占一个字节

System.out.println(Byte.BYTES)   // 1

一个字节就是八位二进制,最高位代表正负,0正1负。

所以byte所表示的整数范围为 -128~127。

这个数字是怎么来的呢,首先我们先得了解一个知识,计算机里存储得二进制都是补码,正数补码的原码就是它本身,负数补码的原码是取反再+1,所求的的数值为负值的绝对值。所以正数最大的就是除了最高位符号位为0外其余部份都为1,二进制表示为01111111十进制值为127,负数最小的值就应该为10000000 取反得到 01111111 +1得到 10000000 因为是负数所以值为-128,因为要取反所以除符号位都为0才能得到绝对值最大的值,进而获得负数最小值。

short

short类型占两个子节

System.out.println(Short.BYTES)  // 2

两个字节就是十六位二进制,同样最高位表示正负。

所以short所表示的整数范围为 -32768~32767。

求法同byte

int

int类型占四个字节

System.out.println(Integer.BYTES) // 4

四字节就是三十二位二进制,同样最高位表示正负。

所以int所表示的整数范围为-2,147,483,648~2,147,483,647。

求法同byte

long

long类型占八个字节

System.out.println(Long.BYTES) // 8

八字节就是六十四位二进制,同样最高位表示正负。

long表示的正数范围为-9,223,372,036,854,775,808~9,223,372,036,854,775,807

求法同byte

范围公式

二进制位数为n 范围为 -2^(n-1) ~ 2^(n-1)-1

浮点型

浮点型也就是小数类型包括float、double,用二进制来存储十进制的小数是无法精确存储的。浮点数存储的时候分为三部分,分别是符号位、指数位(以2为底)、尾数位(位数为省略开头的1),浮点数的精度由尾数尾所决定。

float

float类型占四个子节

System.out.println(Float.BYTES) // 4

四字节就是三十二位,1位符号位8位指数位23位尾数位。

所表示的范围算起来有点复杂,这里就不算了-_-。

float所表示的范围是大于long的,虽然long是八个字节,但是由于存储结构的不同,四字节的float确实的范围是大于long的,主要体现在指数位。

double

double类型占8个子节

System.out.println(Double.BYTES) // 8

八字节六十四位,1位符号位11位指数位52位尾数位,精度高于float,所以一般说float是单精度,double是双精度。

总结

Java语言由于JVM虚拟机的存在,基本数据类型所占的字节数都是固定不变的,本文主要是简介,如有需要精确计算浮点数范围的请查找专业文献。

原文地址:https://www.cnblogs.com/ljsh/p/12988477.html