因为实型比整型要多出小数部分,从整型转为实型时不会有精度丢失,但是由实型转为整型时则会丢失小数部分的数据。
显式转换,也就是强制类型转换,例如下面的代码:
int i=123;
double d=(double)i;
int k=(int)d;
在以上代码中,首先将int型的变量转换为double型,在赋值给变量d,然后又把double型的变量d转换为int型并赋值给int型的变量k。因为最初变量i的值为整数,因此在整个转换过程中不会存在数据的丢失。但是如果变量d带有小数部分,那么变量k则将丢失小数部分的数据,如下面代码:
double d=123.45;
int k=(int)d;
此时,变量k的值就是123了,小数部分的数据在转换过程中就丢失了。另外,有些转换是隐式的,代码中并没有显示的强制类型转换的代码,例如下面的代码:
double d2=12;
System.out.println(d2+123);
以上代码的俩个语句都存在隐式的类型转换。第一句,字面量12的类型为int,但是它却赋值给了double型的d2,其中就存在隐式的int到double的转换过程;第二句,double型的d2和int型的字面量123想家,字面量123在相加之前也有一个隐式的转换成double型的过程。
注意:在算术运算过程中,类型的转换必须遵守一个原则,就是由低位向高位转换,以变量中的类型字节长度最大的为类型目标。