2014-03-26 81 views
1

誰能告訴爲什麼自動裝箱是不工作的,爲什麼有構造正常工作:與Java自動裝箱得到錯誤

int intValue = 12; 
Double FirstDoubleValue = new Double(intValue); 
Double SecondDoubleValue = intValue; // ==> Error 

感謝提前:)

+0

您不能將自動裝箱與其他隱式轉換組合在一起。 – SLaks

回答

4

The constructor expects a double原始類型在這種情況下,通過widening primitive conversion,一個int可以使用。

然而,在

Double SecondDoubleValue = intValue; // ==> Error 

你想的int分配給Double。這些是不兼容的類型。

注意boxing conversion

轉換原始類型的表達式來引用類型

的 相應表達式,所以一個int將成爲一個Integer,但Integer仍不與Double兼容。

+0

因此,自動裝箱不隱式使用包裝類的構造函數? –

+0

@NarutoBijuMode這還不至於我可以告訴規定。就我所見,它通常使用相應引用類型的'static valueOf'方法。請注意,它仍然沒有什麼區別,因爲它會使用'Integer.valueOf(..)',而不是'Double.valueOf(..)'。 –

0

嘗試

Double SecondDoubleValue = (double)intValue; 

Java可以不投INT翻番。它可以將int轉換爲double,這就是你的第二行。

在這裏尋找一些有關轉換的深度答案。 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

+0

我不會投票,但我剛剛刪除了我的答案,其中指出了相同的確切事情。他知道如何去做。他在問爲什麼這是必要的。 – aliteralmind