2

看看这个……今天晚上,当我发现:

Integer i = (Integer)4;
Integer i = (Integer)4f; // Doesn't compile!

但是如果我重写第二行:

Integer i2 = (int)4f; // Then it compiles

有什么不同?为什么我应该能够在第一种情况下使用包装类进行转换,而在第二种情况下却不行?

4

1 回答 1

5

这里

Integer i = (Integer)4f; 

您正在将浮点原语转换为整数包装器 - 它们不适合。这也与自动装箱无关。即使使用显式装箱,这仍然无法编译:

Integer i = (Integer)(Double.valueOf(4f));

在这里:

Integer i2 = (int)4f;

您将 float 原语转换为 int 原语(在此过程中截断),然后 java 自动将其装入 Integer 为您

于 2013-04-25T19:30:53.593 回答