你覺得下面的代碼行?:Java的自動裝箱的valueOf(字符串)
String s= "10.0";
float f = Float.valueOf(s).floatValue();//1
是否有必要呢?爲什麼使用這樣的語法會比使用更好:
float f = Float.valueOf(s);//2
利用自動裝箱功能它仍然給出相同的結果。
總之我的問題是:爲什麼要選擇第一個語法而不是第二個語法?他們完全一樣嗎?
你覺得下面的代碼行?:Java的自動裝箱的valueOf(字符串)
String s= "10.0";
float f = Float.valueOf(s).floatValue();//1
是否有必要呢?爲什麼使用這樣的語法會比使用更好:
float f = Float.valueOf(s);//2
利用自動裝箱功能它仍然給出相同的結果。
總之我的問題是:爲什麼要選擇第一個語法而不是第二個語法?他們完全一樣嗎?
總之,我的問題是:爲什麼應該選擇第一個語法 而不是第二個?他們完全一樣嗎?
那麼,我會使用他們兩個,因爲他們都會生成中間Float
對象,這幾乎總是不需要。無論哪裏需要,我們都會讓它與拳擊一起工作。
現在,您應該只使用Float.parseFloat(String)
方法,該方法會生成原始的float。
至於相似性而言,沒有他們不是完全相同。第二個涉及auto-unboxing
從Float
到float
,而在第一種情況下沒有unboxing
。它使用給定的方法進行轉換。
區別在於第一個顯式轉換爲浮點型,
,而第二個顯示爲outoboxed。
在Java 1.3自動裝箱不可用!
此外,在某些情況下,自動裝箱會產生不需要的結果。
對於在自動裝箱失敗的情況下:看到
喬希布洛赫:有效的Java第二版
f = Float.valueOf(s);
自動裝箱功能是在Java 5之後引入的。在Java早期版本中編譯時,此代碼會給出錯誤。
就垃圾收集而言,它仍然是第二個(Float.valueOf(s))而不是(Float.valueOf(s).floatValue()的首選。後者在堆中創建一個匿名對象,而但是如果我不得不在2之間進行選擇,你會有什麼建議嗎?(同樣在垃圾回收方面)預先感謝 – Rollerball 2013-02-11 23:19:04
@Rollerball。不,在這兩種情況下,你都在創建一個對象,就像我在我的答案中所說的那樣:'Float.valueOf'方法返回'new Float()',因此只在那裏創建一個對象。垃圾收集。 – 2013-02-11 23:23:29
@滾球。如果你強迫我從前兩個選擇(我會爲此詛咒你),我會選擇第二個,並使用自動拆箱,並且不會手動完成這項任務。 – 2013-02-11 23:25:19