Java基本数据类型
Posted 林静生寒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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虚拟机的存在,基本数据类型所占的字节数都是固定不变的,本文主要是简介,如有需要精确计算浮点数范围的请查找专业文献。
以上是关于Java基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章