这两种方法有什么区别?
parseDouble
返回一个基本类型的 double,其值是由字符串表示的值:
返回一个新的 double,它被初始化为由 Double 类的 valueOf 方法执行所表示的指定字符串的值。
valueOf
返回一个 Double 实例,如果已经缓存,则会返回同一个缓存实例。
返回表示指定 double 值的 Double 实例。 如果不需要新的 Double 实例,则通常应使用此方法,而不是 Double(double) 构造函数,因为通过缓存经常请求的值,此方法可能会产生明显更好的空间和时间性能。
为了避免创建新的 Double 对象实例的开销,通常应该使用valueOf
方法。
Double.parseDouble(String)
方法将返回一个基本数据类型double
。
Double.valueOf(String)
方法将返回一个类型为Double
的包装对象。
例如:
double d = Double.parseDouble("1");
Double d = Double.valueOf("1");
此外,valueOf(...)
是一个重载方法,有两个变种:
而parseDouble
则是一个单一的方法,具有以下签名:
parseDouble()方法用于初始化一个字符串(应该包含一些数字值)...它返回的值是原始数据类型,如int、float等。
但是valueOf()创建了一个Wrapper类的对象。你必须解开它才能得到double值。这可以与巧克力相比较。制造商用一些箔或纸将巧克力包装起来,以防止污染。用户拿起巧克力,取下并扔掉包装纸,然后吃掉巧克力。
观察以下转换。
int k = 100;
Integer it1 = new Integer(k);
使用Integer类将int数据类型k转换为对象it1。在Java编程中,可以将it1对象用于需要对象的k处。
以下代码可用于解开(从Integer对象中获取int)对象it1。
int m = it1.intValue();
System.out.println(m*m); // 输出 10000
//intValue() 是 Integer 类的一个方法,返回值为 int 数据类型。
它们都将字符串转换为双精度值,但是parseDouble()方法返回原始的double值,而valueOf()方法进一步将原始的double转换为包含原始double值的Double包装类对象。
从字符串到原始double的转换可能会抛出NFE(NumberFormatException),如果字符串中的值无法转换为原始double。
parseDouble()
的文档说:“返回一个新的 double,其值由指定的字符串表示,就像 Double 类的 valueOf 方法执行的那样”,因此它们应该是相同的。
String str = "123.67";
double d = parseDouble(str);
您将获得双精度值。请参阅tutorialData中的StringToDouble教程。
parseDouble
方法。只有在需要使用装箱类型Double
时才要使用valueOf
方法。请注意保持翻译后的内容与原文意思相同,更易于理解。 - Louis WassermanvalueOf
“以避免创建新的Double对象实例的开销”实际上是错过了重点。 正如其他人指出的那样,重要问题是装箱。如果您需要一个double
,请使用parseDouble
。如果您需要一个Double
,请使用valueOf
。 - Josh Milthorpe