8
个基本数据类型分别是:
boolean、char
、byte、short、int、long、float
、douboe
- boolean类型只有两个值:true和false。
- char类型在内存中占2个字节。表示一个字符,也可以使用ASCII码范围内的值来给char型的变量赋值。由于字符在内存中的取值不存在负数范围,所有取值范围从0 到 65535
- byte是JAVA中最小的数据类型,它在内存中占8位(8个bit),取值范围从-128到127
- short类型在内存中占2个字节,取值范围从 -32768到32767
- int型在内存中占4个字节。取值范围从 -2147483648 到 2147483647**
- long型在内存中占8个字节。取值范围从 -9223372036854775808 到 9223372036854775807
- float型在内存中占4个字节。取值**范围从 -3.4E38 到 3.4E38
- double 型在内存中占8个字节。取值范围从 -1.7E308 到 1.7E308
类型 | 字节 | 范围 |
byte | 1 | -2^7到2^7-1 |
short | 2 | -2^15到2^15-1 |
char | 2 | |
int | 4 | -2^31 到2^31 - 1 |
long | 8 | -2^63 到2^63 -1 |
float | 4 | -3.4E38 到 3.4E38 |
double | 8 | -1.7E308 到 1.7E308 |
boolean | true和false。 |
1.1、float与double的存储
类型 | 符号位 | 阶码 | 尾数 | 长度 |
float | 1 | 8 | 23 | 32 |
double | 1 | 11 | 52 | 64 |
例如:13.625在内存中的存储
首先要先理解浮点数在内存中的存储结构。由上表可知,float数据类型由1个符号位、8个阶码(指数)位、23个尾数(小数点后的数)位共32位组成。
所以float最终的表示方式为: A BBBBBBBB CCCCCCCCCCCCCCCCCCCCCC ,其中A表示符号位,B表示指数位,C表示尾数位。数13.625转换为float类型,首先将整数和小数各自转化为二进制,变成 整数二进制.小数二进制 的形式。如13.625变为1101.101,再将小数点左移或右移至第一个有效数字后面,即1.101101,小数点左移了3位,所以指数为3,IEEE规定实际指数在存储前需要做偏差修正—即实际指数加上指数偏差127得到130(至于为什么这样做有兴趣的可以自己去了解,这里不做介绍),130转化为二进制就是阶码位的值。所以最后A的取值为0或1;B为指数值130的二进制,C为1.101101的小数点后值101101,共有23位,后面补0,为101 1010 0000 0000 0000 0000。所以最终的值为0 10000010 10110100000000000000000
下面是计算13.625在内存中的存储具体计算方法
- 首先将13.625转化成二进制,整数部分除2取余,直到商为0停止 。最后读数时,从最后一个余数读起,一直到最前面的一个余数(模2取余法)
13 / 2 = 6 ···余1
6 / 2 = 3 ···余0
3 / 2 = 1 ···余1
1 / 2 = 0 ···余1
所以整数部分13的二进制位 1101;
- 小数部分乘2取整,然后从前往后读。(乘2取整法)
0.625*2 = 1.25 --- 取整 1
0.25*2 = 0.5 --- 取整 0
0.5*2 = 1 --- 取整 1
所以小数部分的二进制 101
- 然后将 1101.101的小数点向左移至小数点前只有一个1,即左移3位 。(这里为二进制的特定表示方法,将整数部分划为1)
指数位由8位二进制数表示无符号整数0~255(由于有符号数通常的表示法——补码——会使数值的比较变得困难,所以实际指数在存储前需要做偏差修正——即实际指数加上指数偏差127,将它的值调整到一个无符号数的范围内进行比较)。float实际指数的取值范围为-126~+127
阶码就是3+127 = 130 即:1000 0010
- 符号位:0
- 尾数 :因为小数点前必为一,所以记录小数点后面的数即可 101101
- 所以13.625表示为: 0100 0001 0101 1010 0000 0000 0000 0000
转换成16进制后为 41 5A 00 00
2、引用数据类型
- 对象、数组、接口都是引用数据类型。
- 所有引用类型的默认值都是null。
3、Java 常量
常量在程序运行时是不能被修改的。
在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:
final double PI = 3.1415927;
byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。
当使用常量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制, 例如:
int decimal = 100;
int octal = 0144;
int hexa = 0x64;