float a=3;
但以下不會:
Float a=3;
不宜3自動提升爲浮動(如擴展轉換唐不需要顯式演員),然後裝箱到浮動類型?
是否因爲我在Khalid Mogul的Java書中讀到的規則?
擴大轉換不能跟隨 任何裝箱轉換
float a=3;
但以下不會:
Float a=3;
不宜3自動提升爲浮動(如擴展轉換唐不需要顯式演員),然後裝箱到浮動類型?
是否因爲我在Khalid Mogul的Java書中讀到的規則?
擴大轉換不能跟隨 任何裝箱轉換
爲什麼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);
希望這有助於。
實際上自動裝箱相當於'Integer.valueOf(3)'而不是'New Integer(3)'。不同之處在於前者對共同價值進行緩存。 – 2010-09-09 09:48:30
Aaah,很高興知道....感謝Joachim Sauer。 – 2010-09-09 09:49:32
謝謝。 3被翻譯爲Integer.valueOf(3)但是當我們將3類型轉換爲(Float)3時會發生什麼? Float.valueOf(3)現在被調用嗎? – Daud 2010-09-09 12:17:34
Float Integer
^ ^
| |
| |
v v
float <-----------> int
在原語和包裝器之間存在裝箱/拆箱轉換,並且存在從一個數字原語到另一個數字原語的提升。但是Java不能將這個轉換做兩次(在你的情況下從int轉換爲Float)。
Float a = 3.0f;將工作。
你測試過了嗎? – 2010-09-09 12:59:42
是的,它正在工作。 – 2010-09-09 13:22:55
不錯。我問這是爲了鼓勵迴應者在發佈之前首先證明他們的答案。它讓那些閱讀你的答案的人感到寬慰。 – 2010-09-09 21:43:46
你應該說Float a = 3.0f; – 2010-09-09 10:17:37