当我执行下面的代码时,我希望它得到警告“无法从long转换为float”,因为float是32位,long是64位大小。 但看起来没有警告, 谁能解释我怎么样?
public static void main(String[] args)
{
float a=1;
long b=123;
a=b;
System.out.println(a);
}
答案 0 :(得分:5)
float
的范围比long
的范围大得多......存在隐式转换,这可能会失去精确度,但不会降低幅度。 long
到double
也是如此。
来自JLS 5.1.2:
可能会导致从
int
到float
,或从long
到float
,或从long
到double
的扩展原始转换在精度损失中 - 也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,使用IEEE 754舍入到最接近模式(第4.2.4节),得到的浮点值将是整数值的正确舍入版本。