繁体   English   中英

原始浮点数到int的转换是可能的,但引用类型不可能相同,为什么?

[英]Primitive float to int conversion is possible but same is not possible for reference type, why?

这可能是简单的答案,但我想知道细节。

// Narrowing Conversion
    float ff = Integer.MAX_VALUE;
    int ii = (int)ff;

    System.out.println("float: " + ff + " int: " + ii);

    // Reference Conversion
    Integer integer;
    Float floatt = 100F;
    integer = (Integer) floatt;

在上面的示例中,缩小转换正常工作,但是与参考转换相同的工作不正常。 详细说明非常可理解。

您可以将floatint ,但是不能将包装对象转换为不同的类型。 您必须首先解开Float包装器,然后才能将原始float转换为int

Java将自动装箱/拆箱原语及其包装类型,Java也将自动扩展原语类型。 但它不会两者兼而有之。

让我们看一下字节码以了解详细信息。 使用javap -c查看字节码。 编码

float ff = Integer.INT_MAX;
int ii = (int)ff;

编译为

   0: ldc           #3                  // float 2.14748365E9f
   2: fstore_1
   3: fload_1
   4: f2i
   5: istore_2

从字节码可以看出,如果是原始类型f2i ,则编译器会插入f2i (如第4行所示)。

另一方面,如果使用包装器类,则编译器不会插入任何类型转换指令。

这就是为什么您不能投射它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM