为什么编译器在为long指定long时不会出错?

时间:2015-10-05 09:45:58

标签: java

当我执行下面的代码时,我希望它得到警告“无法从long转换为float”,因为float是32位,long是64位大小。 但看起来没有警告, 谁能解释我怎么样?

public static void main(String[] args)
{
    float a=1;
    long b=123;
     a=b;
    System.out.println(a);
}

1 个答案:

答案 0 :(得分:5)

float的范围比long的范围大得多......存在隐式转换,这可能会失去精确度,但不会降低幅度。 longdouble也是如此。

来自JLS 5.1.2

  

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