类型转换
优先级
低 --> 高
byte,short,char->int->long->float->double
看到这里就有很多小伙伴感到纳闷了,明明long占8个字节,
float只占4个字节,为什么float的优先级要比long高呢?
这是因为浮点数类型的优先级一定大于整数类型
强制转换
有高容量转低容量,是需要强制转换的,如下图:
我们声明了一个数据类型为double的变量b,当我们用int类型去接收b时,程序是报错的,如图,程序给了我们三种选择,
第一种是强制转换:
double b=10.0;
int a =(int) b;
第二种是将变量a转换为double类型
double b=10.0;
double a =b;
第三种是将b转换为int类型
int b=10; //注意:int是整数类型,所以没有小数点
int a =b;
从图中我们可以看出,要让double类型的值用int类型接收是需要强制转换的
自动转换
自动转换就是将低容量数据类型转换为高容量数据类型,这时不需要强制转换,程序会帮我们自动转换,因为高容量可以完全接纳低容量的值
转换时内存溢出
如图所示:定义一个int类型的变量a并给它赋值为128,将它强制转换为byte类型时,输出的值是-128,这说明在强制转换时内存溢出了!因为byte的最大值为127
注意点
- 不能布尔值转换,因为它的单位是位
- 不能把对象类型转换为不相干类型,如A是一个人,你不能把转换成一头猪,但是你可以把它变成男人或者女人!
- 在高容量转低容量时需要强制转换
- 在转换时可能内存溢出或者精度问题