8

为什么 Wrapper Float 的类型转换在 Java 中对于 Wrapper Integer 类型不起作用。

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

        Float b = (Float)i;

        System.out.println(b);

    }
}
4

5 回答 5

17

一个Integer不是一个Float。对于对象,如果Integersubclassed ,强制转换会起作用Float,但它不会。

当触发此所需行为的唯一代码是强制转换时, Java 不会自动将 an 拆箱Integer为 a ,强制转换int为 a float,然后自动装箱为 a 。Float(Float)

有趣的是,这似乎有效:

Float b = (float)i;

Java 将自动拆箱iint,然后显式转换为float扩大的原始转换,JLS 5.1.2),然后赋值转换将其自动装箱为Float.

于 2013-06-24T18:00:37.433 回答
2

你要求它做的太多了。您希望它对 i 进行拆箱,将其转换为浮动,然后将其装箱。编译器无法猜测拆箱我会帮助它。但是,如果您将 (Float) cast 替换为 (float) cast,它会猜测 i 需要拆箱才能转换为 float,然后会愉快地将其自动装箱为 Float。

于 2013-06-24T18:02:21.560 回答
1

包装器用于“对象化”相关的原始类型。这种类型的转换是在“对象级别”上完成的,而不是包装原始类型的实际值。

Float由于和Integer本身之间没有关系(它们相关Number但它们只是兄弟姐妹),因此无法直接进行演员表。

于 2013-06-24T18:02:39.820 回答
0
public class Conversion {
public static void main(String[] args) {
    Integer i = 234;

    Float b = i.floatValue();

    System.out.println(b);

}}
于 2013-06-24T18:07:00.517 回答
0

您可以重写您的课程以按照您的意愿工作:

public class Conversion {

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

}
于 2013-06-24T18:09:45.730 回答