为什么在Java中无法进行Wrapper Integer到Float的转换

时间:2013-06-24 17:59:05

标签: java type-conversion wrapper

为什么Wrapper Float的类型转换在java for Wrapper Integer类型中不起作用。

public class Conversion {
    public static void main(String[] args) {
        Integer i = 234;

        Float b = (Float)i;

        System.out.println(b);

    }
}

5 个答案:

答案 0 :(得分:17)

Integer不是Float。对于对象,如果Integer子类Float,则转换将起作用,但事实并非如此。

Java不会将Integer自动取消装入int,转换为float,然后在触发此操作的唯一代码时自动装箱到Float期望的行为是(Float)演员。

有趣的是,这似乎有效:

Float b = (float)i;

Java会自动取消装箱iint,然后显式转换为floatwidening primitive conversion, JLS 5.1.2),然后分配转换自动将其设置为Float {{1}}。

答案 1 :(得分:2)

你要求它做得太多。你希望它取消装箱我,转为浮动然后装箱。编译器无法猜测取消装箱我会帮助它。但是,如果用(浮动)转换替换(Float)强制转换,它将猜测我需要取消装箱才能转换为浮动状态,然后很高兴地将其自动装箱到Float。

答案 2 :(得分:1)

Wrappers有“objectify”相关的原始类型。这种类型的转换是在“object-level”上完成的,以便将它放入某种方式,而不是包装的基本类型的实际值。

由于FloatInteger本身之间没有任何关系(它们与Number相关,但它们只是兄弟姐妹),无法直接进行演员表。

答案 3 :(得分:0)

public class Conversion {
public static void main(String[] args) {
    Integer i = 234;

    Float b = i.floatValue();

    System.out.println(b);

}}

答案 4 :(得分:0)

您可以按自己的意愿重写课程:

public class Conversion {

     public Float intToFloat(Integer i) {
          return (Float) i.floatValue();
     }

}
相关问题