调用Double.valueOf(String s)和new Double(String s)之间的区别是什么?

Rob*_*iam 9 java

所以我有一个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);

用更少的代码?

And*_*s_D 3

取决于实施。openJDK 6 b14使用以下实现Double(String s)

this(valueOf(s).doubleValue());
Run Code Online (Sandbox Code Playgroud)

因此,它在内部调用valueOf(String s),并且与直接调用该方法相比,效率肯定较低

  • 接受这个答案是因为它以短语“取决于实现”开头,从其他答案看来,事实确实如此。 (2认同)