为什么 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);
}
}
为什么 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);
}
}
一个Integer不是一个Float。对于对象,如果Integersubclassed ,强制转换会起作用Float,但它不会。
当触发此所需行为的唯一代码是强制转换时, Java 不会自动将 an 拆箱Integer为 a ,强制转换int为 a float,然后自动装箱为 a 。Float(Float)
有趣的是,这似乎有效:
Float b = (float)i;
Java 将自动拆箱i成int,然后显式转换为float(扩大的原始转换,JLS 5.1.2),然后赋值转换将其自动装箱为Float.
你要求它做的太多了。您希望它对 i 进行拆箱,将其转换为浮动,然后将其装箱。编译器无法猜测拆箱我会帮助它。但是,如果您将 (Float) cast 替换为 (float) cast,它会猜测 i 需要拆箱才能转换为 float,然后会愉快地将其自动装箱为 Float。
包装器用于“对象化”相关的原始类型。这种类型的转换是在“对象级别”上完成的,而不是包装原始类型的实际值。
Float由于和Integer本身之间没有关系(它们相关Number但它们只是兄弟姐妹),因此无法直接进行演员表。
public class Conversion {
public static void main(String[] args) {
Integer i = 234;
Float b = i.floatValue();
System.out.println(b);
}}
您可以重写您的课程以按照您的意愿工作:
public class Conversion {
public Float intToFloat(Integer i) {
return (Float) i.floatValue();
}
}