1. 数值类型之间的转换
图中的 6 个实线箭头,表示无信息丢失的转换。3 个虚线箭头表示可能有精度损失的转换。
- byte --> short, 无信息丢失的转换
- short --> int, 无信息丢失的转换
- char --> int, 无信息丢失的转换
- int --> long, 无信息丢失的转换
- int --> double, 无信息丢失的转换
- float --> double, 无信息丢失的转换
- int --> float, 可能有精度丢失
- long --> float, 可能有精度丢失
- long --> double, 可能有精度丢失
例如,123 456 789 是一个大整数,它所包含的位数比 float 类型所能够表示的位数多。当这个整数转换为 float 类型时,将会得到正确的大小,但会损失一些精度。
int n = 123456789;
float f = n;
System.out.println(f); // 打印 1.23456792E8
两个数值进行二元操作时,先要将两个操作数转换为同一个类型,然后再进行计算。
- 如果两个操作数中有一个是 double 类型,另一个操作数就会转换为 double 类型。
- 否则,如果其中一个操作数是 float 类型,另一个操作数转换为 float 类型。
- 否则,如果其中一个操作数是 long 类型,另一个操作数将会转换为 long 类型。
- 否则,两个操作数转换为 int 类型。
2. 强制类型转换
double x = 9.97;
int nx = (int) x; // nx 的值为 9