在java中,把一个储存范围小的数据类型里的数值赋值到另一个储存范围大的数据类型时,数值会从变成范围更大的数据类型,这样做对数据的精度不会造成影响。
例如:byte a=20;
int b=byte a
显式转换则是反过来,将一个储存范围大的数据类型的数值赋值到一个储存范围小的数据类型中,这样数据的取值范围会变小,数据的精度会损失。
例如:
long a=2^32-1;
int b=long a;
在数据类型的转换时,要记得float和long类型的数据在赋值时要在末尾加上f和l。
例如:
float a=3.14f;
long a=2000;
加上符号,是为了在数值较小时防止被系统误判到其他数据类型,例如上面的long a=2000,此时的2000也是在int的取值范围内的。为什么要特地的将数据类型改为long,我觉得应该是为了应付多次累加或者累乘的循环,防止在循环过程中发生要将一个储存范围大的数据类型的数值赋值到一个储存范围小的数据类型的情况,而这种显式转换是要我们自己动手的,所以程序就会出错。
数据明显出错了。