铸造和包装:一些奇怪的情况

时间:2013-04-25 19:29:08

标签: java casting wrapper

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

时,我试图将一些原始信息投给包装纸
Integer i = (Integer)4;
Integer i = (Integer)4f; // Doesn't compile!

但如果我改写第二行:

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

有什么区别?为什么我能在第一种情况下使用包装类进行转换,而不是在第二种情况下进行转换?

1 个答案:

答案 0 :(得分:5)

这里

Integer i = (Integer)4f; 

你将一个浮动原语转换为Integer包装器 - 它们不合适。这与自动装箱无关。即使有明确的拳击,这仍然不会编译:

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

在这里:

Integer i2 = (int)4f;

你将一个浮动原语转换为一个int原语(在进程中截断),然后java自动将它们转换成一个Integer为你