** 数据类型转换**
自动类型转换(隐式)
概念:不同数据类型运算时,数据范围小的数据类型会自动转换成范围大的数据类型。
其中6根实线代表无信息丢失的转换。有3个虚头,表示可能有精度损失的转换。
例如,123456789 是一个大整数,所包含的位数比 float 类型所能够表达的位数多。 当将这个整型数值转换为 float 类型时,将会得到同样大小的结果,但却失去了一定 的精度。例如:
int n = 123456789;
float f = n; // f is 1.23456792E8
当使用上面两个数值进行二元操作时(例如 n + f,n 是整数, f 是浮点数,) 先要将两个操作数转换为同一种类型,然后再进行计算。
•如果两个操作数中有一个是 double 类型, 另一个操作数就会转换为 double 类型。
•否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。
•否则, 如果其中一个操作数是 long 类型, 另一个操作数将会转换为 long 类型。
•否则, 两个操作数都将被转换为 int 类型。
强制类型转换
在必要的时候,int 类型的值将会自动地转换为 double 类型。但另 一方面,有时也需要将 double 转换成 int。 在 Java 中,允许进行这种数值之间的类型转换。当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换( cast) 实现这个操作。强制类型转换的语法格式是在圆括号中想要转换的目标类型,后面紧跟待转换的变量名。
例如:
double x = 9.997;
int nx = (int) x;
这样,变量nx的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。
如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换。例如,如果 X 是一个 int, 则以下语句
x += 3.5;
是合法的,自动将把 x 设置为(int)(x + 3.5)
。