2010-09-14 24 views

Respuesta

20

La lógica es la misma, aunque el valor de retorno de Double.valueOf() devuelve un objeto doble montón asignado, donde como parseDouble devuelve una primitiva doble. Su ejemplo de código no es del todo correcto. La fuente java dice:

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, entonces el costo es menor para parseDouble (String s) cuando solo necesita el valor, y no todos los métodos adjuntos ... – oyo

+0

Sí, está en lo correcto –

0

valueOf devuelve un doble, parseDouble devuelve un doble. Utilice el que mejor se adapte a sus necesidades.

0

En Java 6 Lo contrario es cierto:

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

parseDouble devuelve un double value, valueOf devuelve un nuevo object de tipo Double.

+0

No creo que haya nada que diga que tiene ser un * nuevo * Doble. –

2

Depende de si desea un doble o un doble. Aunque con autoboxing, en realidad no importa. Si estás haciendo algo muy intenso, entonces debes evitar el uso de dobles en lugares donde se necesiten dobles para evitar la sobrecarga del autoboxing. Pero, necesitaría ser muy, muy, muy intenso antes de que realmente haga la diferencia.

Aun así, recomendaría usar la adecuada según el resultado deseado.

+0

sí. De hecho, solo necesito el valor, así que usaré doble primitivo. – oyo

+0

¿Tiene alguna evidencia de que el autoboxing crea más gastos generales que llamar 'Double.valueOf (somePrimitiveDouble)' explícitamente? Casi garantizaría que no tendría gastos adicionales. El momento en el que desearía evitarlo es en la otra dirección: cuando llama a 'valueOf' que le da un Doble, y usted solo necesita un primitivo. Eso sería inútil por encima. –

1

Simple,

public static double parseDouble(String s) throws NumberFormatException 

devuelve un java primitiva double, mientras

public static Double valueOf(String s) throws NumberFormatException 

devuelve un envuelto doble valor en un Double.

Cuestiones relacionadas