类型转换长期浮动而不是缩小

时间:2014-02-27 11:39:56

标签: java casting implicit-conversion

在java中,隐式转换的层次结构是 byte -> short -> int -> long -> float -> double Long可以容纳8个字节的数据。那么为什么它被隐式地类型化为float,它只能容纳4个字节,而不是可以容纳8个字节的double。为什么它不被视为缩小?

哪些原始类型将隐式转换为char?

1 个答案:

答案 0 :(得分:4)

这不是关于使用了多少位数据。这是关于可以表示的规模。

来自JLS section 5.1.2 (widening primitive conversions)

  

扩展的原始转换不会丢失有关数值整体大小的信息。

     

...

     

将int或long值扩展为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,使用IEEE 754舍入到最接近模式(第4.2.4节),得到的浮点值将是整数值的正确舍入版本。

long的范围远小于float的范围,但固定精度为1. float的精度在绝对值范围内变化。换句话说,long不在float范围之外,但有long个值不能精确表示float值。

转到double对此无效 - 有long个值无法准确表示为double