一、Java的类型提升
类型的自动提升(隐式类型转换)
黑色表示无精度丢失自动转换
红色表示有精度丢失自动转换
表达式的数据类型自动提升
- 所有的byte、short、char 都会自动提升为int类型
- 如果第一个操作是long,则结果为long
- 如果第一个操作数是floag,则结果为float
- 如果第一个操作数是double,则结果为double
容量小的会自动转换为容量大的类型
整数类型可以直接赋值给byte、short、char等类型常量,不需要强制类型转换,要求不得超过其类型表示范围
强制类型转换
int b = (int) 1000L;
由于long类型是8个字节,int 为 4个字节,从int转化为long可能会损失精度,所以需要强制类型转化
二、类型转换中的问题
强制类型转换乱码问题
如果强制类型转换之后的数值超过了目标类型,这时运行虽然不会报错,但是输出结果无意义,因为超出了指定内存范围,因此会指向一块没有意义的内存地址,因此乱码
运算时类型提升问题
public void test02() {
int a = 100;
long b = 200;
int c = (int) (a+b);
System.out.println(c);
}
因为b为long类型,a+b得出的结果将自动提升为long,因此需要将a+b进行强制类型转换
三、心灵鸡汤
过去的习惯,决定今天的你,所以,过去的懒惰,决定你今天的一败涂地。
感谢阅读,水平有限,只是记录自己学习生涯中的漫漫IT路,如有错漏,还请不吝赐教