2012-01-03 12 views

Respuesta

9

Antes de Java 1.5 auto-boxing (y unboxing) no existía en Java. Entonces, necesitarías esto para extraer la primitiva subyacente de un Doble.

Si no está familiarizado con el auto-boxing, puede leer más aquí. http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

+0

Por lo tanto, desde el enlace sugiere que tome un golpe de rendimiento de autoboxing y autounboxing. En un ciclo crítico de rendimiento, ¿podría llamar a myDouble.doubleValue() para evitar tener que aplicar la penalización de unboxing? – MedicineMan

+2

@MedicineMan No, el unboxing es simplemente que el compilador convertirá 'double foo = myDouble' en' double foo = myDouble.doubleValue() 'para usted; llamar al método explícitamente no importa. La mayor parte del golpe de rendimiento es haber creado el objeto 'Doble' en caja en primer lugar (y, probablemente, en menor grado, tener que acceder a la memoria del montón en lugar de una pila var para obtener el valor). – yshavit

+0

yshavit lo clavó. La única forma de evitar la penalización es evitar cualquier transición entre Doble <--> doble. Sin embargo, eso a menudo no es práctico, especialmente si desea usar cualquier colección. Además, sería un caso * muy * raro en el que esto es realmente un cuello de botella de rendimiento para una aplicación. – rfeak

1

Llama a 'doubleValue' en un objeto doble para convertir del objeto en caja al tipo de datos primitivo. Como la mayoría de las veces el Doble se desempaqueta automáticamente en un doble, por lo general no es necesario que lo haga, pero si desea ser explícito en su conversión, puede llamar a este método.

1

Llamarías a doubleValue si necesitas obtener un desde un Double. El primero es un tipo primitivo, mientras que el segundo es un tipo de objeto envoltorio, que básicamente encapsula un valor primitivo dentro de un objeto inmutable. Si es posible (y estoy diciendo esto sin saber exactamente el propósito de su código), use double para todos sus cálculos; solo use Double si necesita almacenar los valores en Collection o Map; esto se debe a que los tipos de objetos consumen más memoria y pueden estar sujetos a operaciones de fundición.

Es fácil confundir double con Double (lo mismo aplica para los otros tipos primitivos vs. tipos de envoltura), ya que el compilador convertirá automáticamente de uno a otro según sea necesario en un proceso conocido como auto-boxing (y auto -unboxing), por lo que se debe tener un poco de cuidado para usar el tipo correcto.

+0

Y solo para agregar a esto un poco, y explícitamente enunciarlo: las operaciones y pruebas matemáticas (aritmética, comparación, etc.) no se pueden hacer con 'Double's, only' double's. – yshavit

1

doubleValue devuelve una primitiva doble del doble objeto. Dependiendo de la situación, le conviene obtener el doble de un Doble.