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

Bob*_*obs 62 java type-conversion

我想转换StringDouble数据类型.我不知道是否应该使用parseDoublevalueOf.

这两种方法有什么区别?

MBy*_*ByD 77

parseDouble 返回包含字符串值的原始double:

返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行.

valueOf 返回一个Double实例,如果已经缓存,你将获得相同的缓存实例.

返回表示指定double值的Double实例.如果不需要新的Double实例,通常应优先使用此方法,而不是构造函数Double(double),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能.

为避免创建新Double对象实例的开销,通常应该使用 valueOf

  • 如果你想要一个原语 - 你通常会这样做 - 那么更喜欢`parseDouble`.只有当你想要一个盒装的"Double"时,`valueOf`才是首选. (14认同)
  • 在常用的JVM(例如OpenJDK和Oracle JDK)中,`Double.valueOf(...)`不会**缓存频繁请求的值.(为了确认这一点,尝试运行`assert Double.valueOf(1)== Double.valueOf(1);`)所以建议人们使用`valueOf`"来避免创建一个新的Double对象实例的开销"真的丢失了关键点.正如其他人所指出的,重要的问题是拳击.如果你需要`double`,请使用`parseDouble`.如果你需要`Double`,请使用`valueOf`. (8认同)
  • 如你所说,我认为parseDouble()是首选.为什么valueOf()? (5认同)
  • 编辑不是我的,并且无效,我会回滚 (2认同)

Pri*_*shi 34

Double.parseDouble(String)将返回原始double类型. Double.valueOf(String)将返回一个类型的包装器对象Double.

所以,对于例如:

double d = Double.parseDouble("1");

Double d = Double.valueOf("1");
Run Code Online (Sandbox Code Playgroud)

而且,valueOf(...)是一种重载方法.它有两个变种:

  1. Double valueOf(String s)
  2. Double valueOf(double d)

鉴于parseDouble是具有以下签名的单一方法:

  1. double parseDouble(String s)