先给大家两行错误的代码,看看它们为什么是错误的?
float a1 = 3.1415926;
inta2 = 23333333L;
![](https://i-blog.csdnimg.cn/blog_migrate/c7fff3e3e3ac736f3f1640090066b254.png)
再展示两行正确的代码,看看它们为什么是正常的?
longa3 = 1234;
doublea4 = 1234.5f;
![](https://i-blog.csdnimg.cn/blog_migrate/98bb7d727140b2e4afeadbd4d2c95ca5.png)
当把大数值类型的数据赋值给小数据类型时,就会出现类型不匹配。而且大类型转小类型可能会造成溢出和精度丢失问题!
反过来,当把小数值类型的数据赋值给大数据类型时,则没有任何问题。
怎么理解呢?
这就好像大杯子里的水和小杯子里的水一样,小杯子里的水倒进大杯子里没有问题,而大杯子里的水倒进小杯子里,就会溢出。
同时,这种不同类型的赋值,也叫做类型转换。
类型转换包括以上的两种(小类型到大类型,大类型到小类型)。
从小类型到大类型的转换,也叫隐式转换,可以自动完成转换。
参考下图:
可以自动完成转换!(箭头指向相对大的类型)
char
⬇
Byte➡short➡int➡ long
⬇ ↘↙⬇
float➡double
注:char的类型是0-65535,且包含在int内部,和byte,short无关。
从大类型到小类型的转换,也叫强制转换,需要加一个强制转换符,意在表明我知道自己在干什么,但还是愿意承担风险。
格式
小类型变量 变量名称 = (小类型)大类型变量;
如:
long b = 1233333333L;
int a = (int)b;
总结:
从小类型到大类型的转换,也叫隐式转换,可以自动完成转换。
从大类型到小类型的转换,也叫强制转换,需要加一个强制转换符。
大类型转小类型可能会造成溢出和精度丢失问题!