Was ist der Unterschied zwischen dem Aufruf von Double.valueOf (String s) und neuen Double (String s)?

9

Also habe ich einen String und ich möchte ein Double-Objekt mit dem String als Wert erstellen.

Ich kann

anrufen

Double myDouble = new Double (myString);

oder ich kann

anrufen

Double myDouble = Double.valueOf(myString);

Gibt es einen Unterschied? Ich schätze, die ersten Garantien, dass ein neues Objekt auf dem Heap erstellt wird und das zweite könnte ein vorhandenes Objekt erneut verwenden.

Für zusätzliches Guthaben : Die Zeichenfolge könnte null sein. In diesem Fall möchte ich, dass das Double null ist, aber der obige throw eine NullPointerException. Gibt es eine Art zu schreiben?

Double myDouble = myString == null ? null : Double.valueOf(myString);

in weniger Code?

    
Rob Gilliam 21.01.2011, 11:01
quelle

5 Antworten

3

Hängt von der Implementierung ab. openJDK 6 b14 verwendet diese Implementierung von Double(String s) :

%Vor%

So ruft% valueOf(String s) intern auf und muss im Vergleich zum direkten Aufruf dieser Methode weniger effizient sein.

    
Andreas_D 21.01.2011, 11:10
quelle
3

Ihre Annahme ist richtig. Die zweite Möglichkeit, ein Double aus String zu erhalten, kann schneller sein, da der Wert möglicherweise aus einem Cache zurückgegeben wird.

In Bezug auf die zweite Frage können Sie eine null-sichere Helper-Methode erstellen, die null zurückgibt, anstatt NullPointerException zu werfen.

    
Boris Pavlović 21.01.2011 11:07
quelle
3

von Apache

%Vor%

& amp;

%Vor%

von der Sonne [Orakel] jdk

%Vor%

& amp;

%Vor%     
Jigar Joshi 21.01.2011 11:09
quelle
2

Kein Unterschied, zumindest in Oracle JDK 1.6:

%Vor%     
Michael Borgwardt 21.01.2011 11:10
quelle
0

Wenn Sie sich Gedanken über die Leistung machen, sollten Sie ein primitives Element verwenden.

%Vor%     
Peter Lawrey 21.01.2011 11:27
quelle

Tags und Links