2010-09-14 120 views

回答

20

的邏輯是相同的,但Double.valueOf的返回值()返回一個堆分配Double對象,其中,作爲parseDouble返回一個原語雙。您的代碼示例不完全正確。 java源文件如下:

public static double parseDouble(String s) throws NumberFormatException { 
    return FloatingDecimal.readJavaFormatString(s).doubleValue(); 
} 

public static Double valueOf(String s) throws NumberFormatException { 
    return new Double(FloatingDecimal.readJavaFormatString(s).doubleValue()); 
} 
+2

thx,所以對於parseDouble(String s),當你只需要這個值,而不是所有附加的方法時,成本都會降低... – oyo 2010-09-14 12:52:52

+0

是的,你是正確的 – 2010-09-14 15:00:47

0

valueOf返回一個double,parseDouble返回一個Double。使用適合您需求的任何一種。

0

在Java 6的情況正好相反:

 
Double valueOf(String s) throws ... {  
     return new Double(Double.parseDouble(s)); 
} 
1

parseDouble返回double value,返回的valueOf Double類型的新object

+0

我不認爲有任何說它有成爲*新*雙。 – 2010-09-14 13:06:20

2

取決於您想要雙倍還是雙倍。儘管使用自動裝箱,但這並不重要。如果你正在做的事情非常密集,那麼你想避免在需要雙打的地方使用雙打,以避免自動裝箱的開銷。但是,在實際上有任何改變之前,它需要非常非常非常密集。

但是,我仍然會主張根據所需的結果使用適當的一個。

+0

是的。事實上,我只需要價值,所以我會使用雙重原語。 – oyo 2010-09-14 13:02:44

+0

您是否有任何證據顯示自動裝箱會比明確調用'Double.valueOf(somePrimitiveDouble)'產生更多開銷?我幾乎可以保證它沒有額外的開銷。你想避免它的時間是另一個方向:當你調用'valueOf'時,它會給你一個Double,而你只需要一個原語。這將是毫無意義的開銷。 – 2010-09-14 13:08:55

1

簡單,

public static double parseDouble(String s) throws NumberFormatException 

返回原始double一個java,而

public static Double valueOf(String s) throws NumberFormatException 

返回一個Double一個包裹雙精度值。

相關問題