2010-09-14 5 views

Répondre

20

La logique est la même, mais la valeur de retour de Double.valueOf() retourne un tas alloué objet double, alors que parseDouble retourne une primitive double. Votre exemple de code n'est pas tout à fait correct. La source java lit:

public static double parseDouble(String s) throws NumberFormatException { 
    return FloatingDecimal.readJavaFormatString(s).doubleValue(); 
} 

public static Double valueOf(String s) throws NumberFormatException { 
    return new Double(FloatingDecimal.readJavaFormatString(s).doubleValue()); 
} 
+2

thx, donc le coût est moindre pour parseDouble (String s) quand vous avez juste besoin de la valeur, et pas toutes les méthodes attachées ... – oyo

+0

Oui, vous avez raison –

0

valeurOf renvoie un double, parseDouble renvoie un double. Utilisez celui qui convient à vos besoins.

0

En Java 6 l'inverse est vrai:

 
Double valueOf(String s) throws ... {  
     return new Double(Double.parseDouble(s)); 
} 
1

parseDouble retourne un double value, valueOf renvoie une nouvelle object de type Double.

+0

Je ne pense pas qu'il y ait quelque chose qui dit qu'il a être un * nouveau * Double. –

2

Dépend si vous voulez un double ou un double. Bien qu'avec l'autoboxing, cela n'a pas vraiment d'importance. Si vous faites quelque chose de très intensif alors vous voulez éviter d'utiliser des doubles dans les endroits où les doubles sont nécessaires afin d'éviter le surcoût automatique. Mais, il faudrait que ce soit très, très, très intensif avant de vraiment faire la différence.

Cependant, je préconiserais toujours en utilisant le bon en fonction du résultat souhaité.

+0

oui. En fait, j'ai juste besoin de la valeur, donc je vais utiliser double primitive. – oyo

+0

Avez-vous des preuves que l'autoboxing crée plus de surcharge que d'appeler explicitement 'Double.valueOf (somePrimitiveDouble)'? Je voudrais presque garantir qu'il n'y aurait pas de frais supplémentaires. Le moment où vous voudriez l'éviter est dans l'autre sens: quand vous appelez 'valueOf' qui vous donne un Double, et vous avez seulement besoin d'une primitive. Ce serait inutile. –

1

Simple,

public static double parseDouble(String s) throws NumberFormatException 

renvoie une primitive java double, tandis que

public static Double valueOf(String s) throws NumberFormatException 

retourne une valeur enveloppé double dans un Double.

Questions connexes