一.自动类型转换
1.什么是自动类型转换,为什么要进行自动类型转换?
类型范围小的变量,可以直接赋值给类型范围大的变量。存在不同类型的变量赋值给其他类型的变量。
比如在将来的开发中有这样的·业务开发场景,你有可能要去调别人的一个功能,你调用完别人的功能之后,别人的功能会返回一个数据给你,这个数据可能是一个byte类型的数据,你定义一个byte类型的变量a来接,你可能要把a变量里记住的数据传给另外一个功能来完成另外一个业务,而另外一个功能它可能用的是一个int类型的变量来接受数据的,这意味着你需要把byte类型的变量a赋值给int类型的变量b,这样才能把数据传给人家,那这个就要发生所谓的自动类型转换。
我用代码来演示一下自动类型转换:
byte a = 10;
int b = a; //发生了自动类型转换,如果要输出结果a和b都为10
2.自动转换类型的其他形式
byte→short→int→long→float→double;char→int
int c = 100; // 4
double d = c; // 8 发生了自动类型转换
char ch = 'a';
int i = ch; //发生了自动类型转换
二.表达式的自动类型转换
1.在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。
byte,short,char→int→long→float→double
2.注意事项:
表达式的最终结果类型由表达式中的最高类型决定。
在表达式中,byte,short,char 是直接转换成int类型参与运算的。
byte a = 10;
int b = 15;
long c = 30;
long rs = a + b + c;
byte a = 10;
int b = 20;
double rs = a + b + 2.0;
三.强制类型转换
小范围类型的变量可以直接赋值给大范围类型的变量,而大范围类型的变量不可以直接赋值给小范围类型的变量。
类型范围大的数据或变量,直接赋值给类型范围小的变量,会报错。
int a = 10;
byte b = a; //会报错
为什么会出现报错呢,因为担心大范围类型的变量里面的数据过大而小范围类型的这个变量可能装不下。
那怎么将类型范围大的变量,数据赋值给类型范围小的变量不会报错呢,进行强制类型转换,如下:
数据类型 变量2 = (数据类型)变量1、数据
int a = 20;
byte b = (byte)a;
注意事项:
强制类型转换可能造成数据(丢失)溢出;
浮点型强制转成整型,直接丢掉小数部分,保留整数部分返回;