基本数据类型:
整型
byte short int long
8 16 32 64 bit
浮点型
float double
32 64 bit
字符型
char
16 bit
布尔型
boolean
1 bit
1 byte = 8 bit 0 0000000 byte的比特位中第一个记录符号 所以范围是 -2的7次方 ~ 2的7次方-1 即-128~127
注意当声明byte变量时 若数大于127 那么需要强制类型转换 不然会出现编译时异常
1 short = 16 bit 范围是 -2的15次方 ~ 2的15次方-1
1 int = 32 bit 范围是 -2的31次方 ~ 2的31次方-1
1 long = 64 bit 范围是 -2的63次方 ~ 2的63次方-1
1 float = 32bit 比特位中第一个记录符号 后面8个记录指数 其余表示小数
0 00000000 00000000000000000000000
1 double = 64bit 比特位中第一个记录符号 后面11个记录指数 其余表示小数
如 double d = 5.3e12; 这样赋值是合法的
1 char = 16 bit Unicode编码
1 boolean = 1 bit 刚好存 true 和 false
0值(默认值):
整型默认值—-0 浮点型默认—-0.0
字符型默认—-0对应的char值
布尔型默认—-false 引用数据默认—-null
类型转换:
基本类型——基本类型之间 可以直接转换(自动 强制)
引用类型——引用类型之间 可以直接转换(自动 强制)
基本类型——引用类型之间 不可以直接转换(包装类)
基本类型——基本类型之间
布尔类型不能和其他基本类型之间发生转换
小数据类型相同时:
比如 都是整型 浮点型
大空间变量可以直接存储小空间的数据
小空间的想存进大空间需强制类型转换 转换过程中如果超出类型的规定范围 可能会有数值损失
byte a = 1; int b = a; 自动 因为int类型的空间比byte大
int a = 1000; byte b = (byte)a; 强制 因为byte空间比int小 但是转换后会把多余的砍掉 只留8bit
a = 1000——>2进制 32bit 00000000 00000000 00000011 11001000
byte b = (byte)a——>只剩下最后面的8bit 11001000 —-> -24
小数据类型不同时:
整型 —— 浮点型
比较精确程度 浮点型精确程度更高 所以 整型可以直接转为浮点型
反之 整型精度低 浮点型转为整型 需要强制类型转换
任何一个浮点型都可以直接存放一个整型(因为long都可以直接放进float中)
int a = 1; float b = a; //b = 1.0
float a = 1.9F; int b = (float)a; //b = 1 (强制类型转换)
整型 —— 字符型
字符型可以直接转换为整型 因为 每一个字符都会对应一个 Unicode码 来转换成数字
整型转换为字符型可能会有损失
char x = ‘a’; int y = x; //y = 97
int x = 97; char y = (char)x; //y = a
数据类型自动提升
规则:
1 所有的byte,short,char型的值将被提升为int型;
2 如果有一个操作数是long型,计算结果是long型;
3 如果有一个操作数是float型,计算结果是float型;
4 如果有一个操作数是double型,计算结果是double型;
注意 声明为final的变量会被JVM优化 视为常量 数据类型不会发生自动提升
**
运算规则
- = 右边先自动转换成表达式中最高级的数据类型,再进行运算
- 整型经过运算会自动转化最低 int 级别
- 若两个 char 类型的相加,得到的是一个 int 类型的数值
- = 左边数据类型级别 大于 右边数据类型级别,右边会自动升级
- = 左边数据类型级别 小于 右边数据类型级别,需要强制转换右边数据类型
- char 与 short,char 与 byte 之间需要强转,因为 char 是无符号类型