文章目录
一、理解基础
变量与字面量关系
- 整数型数据(字面量)默认被当作int类型处理
- 浮点型数据默认当作double类型处理
二、基本数据类型转换规则
2.1自动类型转换
- 小容量数据类型自动转大容量
举例
- long b =200;
- 存在自动类型转换
分析:
- 200这个字面量默认被当作int类型处理
- 需要自动转换成long类型
2.2强制类型转换
- 大容量需要强制转为小容量,中间有精度损失
举例
- byte b =300
- 编译错误:不兼容的类型: 从int转换到byte可能会有损失
如何解决?
- 加强制转换:byte b = (byte)300
如何进行强制转换?
- 自动将前面多余字节删掉
- 如:byte b = (byte)300
- int 型300二进制:00000000 00000000 00000001 00101100
- byte占用1个字节,砍掉3个字节,结果:00101100
- 此时损失精度
2.3char类型与整数型转换
- 整数赋值给char类型变量,会自动转换为char字符型,结果是一个字符
char x = 97;
System.out.println(x);//输出a
按照字符的ASCII码输出的是对应字符
2.4int型什么时候可以直接赋值byte、short、char
整数字面量没有超出byte、short、char的取值范围时,这个整数字面量可以直接赋值给这三种类型变量
byte b =1,不报错
byte b =300,报错,超出范围
2.5byte、short、char做运算时,先转化int再做运算
char c1='a';
byte b=1;
short s = c1+b;//编译报错
为什么报错?
- 编译器先将c1+b转换为int类型,不知道加法结果(可能超出int)
- 只知道int类型,所以报错
- 可以加上强转 short s =(short)(c1+b)
三、总结
- 八种数据类型除boolean类型不能转换,其他都可以
- 整数字面量没有超出byte、short、char的取值范围时
这个整数字面量可以直接赋值给这三种类型变量 - 自动类型转换:小容量自动转大容量
- 强制类型转换:大变小——加上强制类型转换符——(数据类型)
- byte、short、char做运算时,先转化int再做运算
- 多种数据类型混合运算时,最终结果类型是最大容量对应的类型