为什么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);
}
}
答案 0 :(得分:17)
Integer
不是Float
。对于对象,如果Integer
子类Float
,则转换将起作用,但事实并非如此。
Java不会将Integer
自动取消装入int
,转换为float
,然后在触发此操作的唯一代码时自动装箱到Float
期望的行为是(Float)
演员。
有趣的是,这似乎有效:
Float b = (float)i;
Java会自动取消装箱i
到int
,然后显式转换为float
(widening primitive conversion, JLS 5.1.2),然后分配转换自动将其设置为Float
{{1}}。
答案 1 :(得分:2)
你要求它做得太多。你希望它取消装箱我,转为浮动然后装箱。编译器无法猜测取消装箱我会帮助它。但是,如果用(浮动)转换替换(Float)强制转换,它将猜测我需要取消装箱才能转换为浮动状态,然后很高兴地将其自动装箱到Float。
答案 2 :(得分:1)
Wrappers有“objectify”相关的原始类型。这种类型的转换是在“object-level”上完成的,以便将它放入某种方式,而不是包装的基本类型的实际值。
由于Float
和Integer
本身之间没有任何关系(它们与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();
}
}