¿Hay alguna diferencia entre BigDecimal (& # 8220; 0 & # 8221;) y BigDecimal.ZERO?

StackOverflow https://stackoverflow.com/questions/269669

  •  06-07-2019
  •  | 
  •  

Pregunta

Ya sea para las comparaciones o la inicialización de una nueva variable, ¿hace alguna diferencia cuál de estas utiliza?

Sé que BigDecimal.ZERO es una función 1.5, por lo que es una preocupación, pero suponiendo que estoy usando 1.5 ¿importa?

Gracias.

¿Fue útil?

Solución

BigDecimal.ZERO es una constante predefinida y, por lo tanto, no tiene que evaluarse desde una cadena en tiempo de ejecución como lo sería BigDecimal (" 0 ") . Será más rápido y no requerirá la creación de un nuevo objeto.

Si su código necesita ejecutarse en pre-1.5, puede usar el patrón Singleton (muy difamado) para crear un objeto equivalente a BigDecimal.ZERO . La primera vez que se usa, llamaría a BigDecimal (" 0 ") para crear un objeto cero y devolver ese objeto en llamadas posteriores. De lo contrario, si su código se ejecuta en un sistema 1.5, su objeto singleton puede devolver BigDecimal.ZERO sin penalización de tiempo de ejecución.

Otros consejos

El uso de ZERO no crea un nuevo objeto ni requiere ningún análisis. Definitivamente el camino a seguir.

Antes de hablar sobre las penalizaciones de tiempo de ejecución, asegúrese de que este código sea importante. Configure perfiles y mida el caso de uso completo.

Sin embargo, prefiera Bigdecimal.ZERO , ya que está marcado en el momento de la compilación, mientras que puede escribir accidentalmente new BigDecimal (" 9 ") , que el compilador aceptará, pero lo que provocará errores en su aplicación.

Por curiosidad, verifiqué al constructor para BigDecimal y no tiene optimizaciones para el " 0 " cuerda. Así que definitivamente sí, hay una diferencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top