数值类型之间的合法转换
1.图中的实心箭头表示无信息丢失的转换,虚箭头表示有可能精度损失的转换。
例如
int a = 123456789;
float b = a;//b=1.23456792E8
2.当时用上边两个进行计算时要讲数值类型转换成相同的才能计算:
- 如果两个操作数中有一个是double,另一个就会转成double
- 否则如果两个操作数中有一个是float,另一个就会转成float
- 否则如果两个操作数中有一个long,另一个就会转成long
- 否则两个操作数都将被转成int类型
强制类型转换
强制类型转换,比如说double转int,有可能会丢失一些信息。
强制类型转换的语法是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。例如:
double c = 9.993;
int d = (int)c;//9
d为9,强制类型转换通过截取小数点部分将浮点型转换成整型。
如果想对浮点型进行舍入运算,以便得到最接近的整型,这种情况下,就需要使用Math.round方法:
double c = 9.993;
int d = (int)Math.round(c);//10
现在d的值为10,当时用round时,仍需要进行强制类型转换,因为round方法返回的类型是long类型,由于存在信息丢失的可能性,所以只有使用显性的强制类型转换才能将long类型转成int类型。
警告:如果试图将一个数值从一种类型强制转成另一种类型,而又超出了目标类型的表示范围,结果就截断成一个完全不同的值。例如,(byte)300的实际值为44