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

pra*_*y G 0 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);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

范围float远大于long... 的范围隐式转换可能会失去精度,但不会失去幅度.同样是真实的longdouble.

JLS 5.1.2:

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