为什么 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
。对于对象,如果Integer
subclassed ,强制转换会起作用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();
}
}