Double.valueOf(String s)和Double.ParseDouble(String s)有什么区别?

15

根据我的理解,ParseDouble函数的作用类似于:

 Double parseDouble(String s) throws ... {       
      return new Double(Double.valueOf(s));
 }
6个回答

20
逻辑相同,但 Double.valueOf() 返回一个分配在堆上的 Double 对象,而 parseDouble 返回原始的 double。你的代码示例不完全正确。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
谢谢,所以当你只需要值而不是所有附加方法时,使用parseDouble(String s)的成本会更低... - oyo

2

取决于您想要double还是Double。虽然使用自动装箱,这并不重要。如果您正在进行非常密集的操作,则应避免在需要Doubles的地方使用doubles,以避免自动装箱开销。但是,它需要非常非常非常密集才能真正产生任何差异。

然而,我仍然建议根据所需结果使用正确的类型。


是的。实际上我只需要这个值,所以我将使用双精度原始类型。 - oyo
你有证据表明自动装箱比显式调用Double.valueOf(somePrimitiveDouble)创建更多的开销吗?我几乎可以保证它不会有额外的开销。当你想要避免它时,是在另一个方向上:当你调用valueOf得到一个Double,而你只需要一个原始类型时。那将是无意义的开销。 - Mark Peters

1

parseDouble 返回一个 double 值,valueOf 返回一个新的 Double 类型对象


我认为没有什么规定它必须是一个*新的Double。 - Mark Peters

1

简单易懂,

public static double parseDouble(String s) throws NumberFormatException 

返回一个Java原始类型double,而

public static Double valueOf(String s) throws NumberFormatException

返回一个用Double包装的double值。


0

valueOf 返回一个 double,parseDouble 返回一个 Double。使用适合您需求的方法。


0
在Java 6中,情况恰恰相反:
Double valueOf(String s) throws ... {       
      return new Double(Double.parseDouble(s));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接