2010-09-09 19 views
3

以下工作分配整數值轉換爲浮動包裝在Java中

float a=3; 

但以下不會:

Float a=3; 

不宜3自動提升爲浮動(如擴展轉換唐不需要顯式演員),然後裝箱到浮動類型?

是否因爲我在Khalid Mogul的Java書中讀到的規則?

擴大轉換不能跟隨 任何裝箱轉換

+0

你應該說Float a = 3.0f; – 2010-09-09 10:17:37

回答

3

爲什麼Float a=3;行不通是因爲編譯器包裹3到它的原因是Integer對象(在本質上,編譯器這:Float a = new Integer(3);,這已經是一個編譯器錯誤)。 Float對象不是和Integer對象(儘管它們來自相同的Number對象)。

以下工作:

Number a = 3; 

這在本質上是由編譯器翻譯爲:

Number a = new Integer(3); 

或約阿希姆·紹爾提到,

Number a = Integer.valueOf(3); 

希望這有助於。

+0

實際上自動裝箱相當於'Integer.valueOf(3)'而不是'New Integer(3)'。不同之處在於前者對共同價值進行緩存。 – 2010-09-09 09:48:30

+0

Aaah,很高興知道....感謝Joachim Sauer。 – 2010-09-09 09:49:32

+0

謝謝。 3被翻譯爲Integer.valueOf(3)但是當我們將3類型轉換爲(Float)3時會發生什麼? Float.valueOf(3)現在被調用嗎? – Daud 2010-09-09 12:17:34

2
Float    Integer 
^    ^
    |     | 
    |     | 
    v     v 
float <-----------> int 

在原語和包裝器之間存在裝箱/拆箱轉換,並且存在從一個數字原語到另一個數字原語的提升。但是Java不能將這個轉換做兩次(在你的情況下從int轉換爲Float)。

-1

Float a = 3.0f;將工作。

+0

你測試過了嗎? – 2010-09-09 12:59:42

+0

是的,它正在工作。 – 2010-09-09 13:22:55

+0

不錯。我問這是爲了鼓勵迴應者在發佈之前首先證明他們的答案。它讓那些閱讀你的答案的人感到寬慰。 – 2010-09-09 21:43:46