java - 将整数值分配给Java中的Float包装器

标签 java boxing

以下作品

float a=3;

但以下不是:

Float a=3;

难道不应该将 3 自动提升为 float(因为扩大转换不需要显式转换)然后装箱为 Float 类型吗?

是因为我在 Khalid Mogul 的 Java 书中读到的一条规则吗?

Widening conversions can't be followed by any boxing conversions

最佳答案

Float a=3; 不起作用的原因是编译器将 3 包装到它的 Integer 对象中(本质上,编译器这样做:Float a = new Integer(3); 并且这已经是一个编译器错误)。 Float 对象不是 Integer 对象(即使它们来自同一个 Number 对象)。

以下作品:

Number a = 3;

本质上由编译器翻译为:

Number a = new Integer(3);

或如 Joachim Sauer 所述,

Number a = Integer.valueOf(3);

希望这对您有所帮助。

关于java - 将整数值分配给Java中的Float包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3675365/

相关文章:

java - ORA-00001 : unique constraint violated

java - 使用 Soot 分析 Android 应用程序

java - 关闭对象中包含的InputStream

java - Spring Boot JPA ManyToMany 导致 OutOfMemoryError

c# - 当访问存储在动态中的对象的值类型属性时,是否会导致对这些属性的值进行装箱?

java - 避免多个 Singleton 实例?

c# - 装箱与拆箱

java - JVM 是否优化了不必要的自动装箱?

objective-c - 自动装箱 NSArray?

c# - 好奇心 : Converting a C# struct into an object still copies it