在java中,隐式转换的层次结构是
byte -> short -> int -> long -> float -> double
Long可以容纳8个字节的数据。那么为什么它被隐式地类型化为float,它只能容纳4个字节,而不是可以容纳8个字节的double。为什么它不被视为缩小?
哪些原始类型将隐式转换为char?
答案 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
。