2010-09-14 95 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一个包裹双精度值。

相关问题