2013-02-11 76 views
2

你覺得下面的代碼行?:Java的自動裝箱的valueOf(字符串)

String s= "10.0"; 
    float f = Float.valueOf(s).floatValue();//1 

是否有必要呢?爲什麼使用這樣的語法會比使用更好:

float f = Float.valueOf(s);//2 

利用自動裝箱功能它仍然給出相同的結果。

總之我的問題是:爲什麼要選擇第一個語法而不是第二個語法?他們完全一樣嗎?

回答

5

總之,我的問題是:爲什麼應該選擇第一個語法 而不是第二個?他們完全一樣嗎?

那麼,我會使用他們兩個,因爲他們都會生成中間Float對象,這幾乎總是不需要。無論哪裏需要,我們都會讓它與拳擊一起工作。

現在,您應該只使用Float.parseFloat(String)方法,該方法會生成原始的float。


至於相似性而言,沒有他們不是完全相同。第二個涉及auto-unboxingFloatfloat,而在第一種情況下沒有unboxing。它使用給定的方法進行轉換。

+0

就垃圾收集而言,它仍然是第二個(Float.valueOf(s))而不是(Float.valueOf(s).floatValue()的首選。後者在堆中創建一個匿名對象,而但是如果我不得不在2之間進行選擇,你會有什麼建議嗎?(同樣在垃圾回收方面)預先感謝 – Rollerball 2013-02-11 23:19:04

+0

@Rollerball。不,在這兩種情況下,你都在創建一個對象,就像我在我的答案中所說的那樣:'Float.valueOf'方法返回'new Float()',因此只在那裏創建一個對象。垃圾收集。 – 2013-02-11 23:23:29

+0

@滾球。如果你強迫我從前兩個選擇(我會爲此詛咒你),我會選擇第二個,並使用自動拆箱,並且不會手動完成這項任務。 – 2013-02-11 23:25:19

0

區別在於第一個顯式轉換爲浮點型,
,而第二個顯示爲outoboxed。

在Java 1.3自動裝箱不可用!

此外,在某些情況下,自動裝箱會產生不需要的結果。
對於在自動裝箱失敗的情況下:看到

喬希布洛赫:有效的Java第二版

0

f = Float.valueOf(s);

自動裝箱功能是在Java 5之後引入的。在Java早期版本中編譯時,此代碼會給出錯誤。