Double类parseDouble()和valueOf()方法的区别

数字类型的String字符串转换为浮点数通常采用parseDouble()和valueOf()方法,两者主要是存在以下两点区别。

区别一:参数区别
Double.parseDouble(java.lang.String)的参数只能是String,如果参数改为double类型提示“The method parseDouble(String) in the type Double is not applicable for the arguments (double)”错误。
Double.valueOf()的参数类型可以是浮点型或者是字符串均可。

String pi = "3.1415926";
double floatOrDouble = 3.1415926;
double parseDouble = Double.parseDouble(pi);
//提示错误 Change type of"floatOrDoubleP" to "String"
//double floatOrDoubleP = Double.parseDouble(floatOrDouble);
System.out.println(parseDouble);
//System.out.println(floatOrDoubleP);
Double valueOf = Double.valueOf(pi);
Double floatOrDoubleV = Double.valueOf(floatOrDouble);
System.out.println(valueOf);
System.out.println(floatOrDoubleV);

控制台输出结果:

3.1415926
3.1415926
3.1415926
区别二:返回类型
Double.parseDouble(java.lang.String)把数字类型的字符串转换成double类型
Double.valueOf()方把数字类型的字符串转换成Double类型
Double.parseDouble()方法的源码:
public static double parseDouble(String s) throws NumberFormatException {
        return FloatingDecimal.readJavaFormatString(s).doubleValue();
}
Double.valueOf()方法的源码:

public static Double valueOf(String s) throws NumberFormatException {
	// new Double()
        return new Double(FloatingDecimal.readJavaFormatString(s).doubleValue());
}
通过格式化小数点位数两者结果相同,可以看出除参数和返回类型外两者区别不大。

DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(Double.parseDouble(pi)));
System.out.println(df.format(Double.valueOf(pi)));
控制台输出结果:

3.14
3.14
Integer工具类也是很相似的,但是Integer的valueOf内部实现的时候会有一些不同。
Integer.valueOf()方法的源码:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}











你可能感兴趣的:(Java)