2013-04-25 64 views
2

看這個......今晚我是想投一些primiteves到包裝的時候我發現:鑄造和包裝:一些奇怪的情況下

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

但是,如果我重寫了下聯:

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

有什麼區別?爲什麼我應該能夠在第一種情況下使用包裝類,而不是在第二種情況下?

回答

5

這裏

Integer i = (Integer)4f; 

鑄造的youre原始社會到一個Integer封裝的浮動 - 他們不適合。這與自動裝箱無關。即使有明確的拳擊,這仍然不會編譯:

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

而在這裏:

Integer i2 = (int)4f; 

您鑄造浮法原爲int原語(在這個過程中截取),然後Java的自動的箱子,進整數爲你