所以我有一个String,我想创建一个Double对象,将String作为值。
我可以打电话
Double myDouble = new Double (myString);
或者我可以致电
Double myDouble = Double.valueOf(myString);
有区别吗?我猜第一个保证在堆上创建一个新对象,第二个可能重用现有对象。
要获得额外的功劳:字符串可能是 null ,在这种情况下,我希望Double为 null ,但以上两者都抛出一个NullPointerException。有没有一种写作方式
Double myDouble = myString == null ? null : Double.valueOf(myString);
用更少的代码?
答案 0 :(得分:3)
你的假设是对的。获取Double out of String的第二种方法可以更快,因为可以从缓存中返回值。
关于第二个问题,你可以创建一个helper null safe方法,该方法返回null而不是抛出NullPointerException。
答案 1 :(得分:3)
来自apache
public static Double valueOf(String string) throws NumberFormatException {
return new Double(parseDouble(string));
}
&安培;
public Double(String string) throws NumberFormatException {
this(parseDouble(string));
}
来自sun [oracle] jdk
public Double(String s) throws NumberFormatException {
// REMIND: this is inefficient
this(valueOf(s).doubleValue());
}
&安培;
public static Double valueOf(double d) {
return new Double(d);
}
答案 2 :(得分:3)
取决于实施。 openJDK 6 b14使用Double(String s)
:
this(valueOf(s).doubleValue());
因此,与直接调用该方法相比,它在内部调用valueOf(String s)
并且必须效率低。
答案 3 :(得分:2)
没有任何区别,至少在Oracle JDK 1.6中是这样的:
public Double(String s) throws NumberFormatException {
// REMIND: this is inefficient
this(valueOf(s).doubleValue());
}
答案 4 :(得分:0)
如果您担心性能,则应考虑使用原语。
double myDouble = Double.parseDouble(myString);
答案 5 :(得分:0)
这将返回有效的Double,否则返回null。
Double myDouble = null;
try {
myDouble = Double.valueOf(myString);
}
catch (Exception e) { }
即使myString为空,它也可以处理