Existe uma diferença entre BigDecimal ( “0”) e BigDecimal.ZERO?
-
06-07-2019 - |
Pergunta
Quer para comparações ou inicialização de uma nova variável, isso faz uma diferença que um desses você usar?
Eu sei que BigDecimal.ZERO é uma característica 1.5, de modo que é uma preocupação, mas supondo que eu estou usando 1.5 que isso importa?
Graças.
Solução
BigDecimal.ZERO
é uma constante pré-definida e, portanto, não tem que ser avaliada de uma cadeia em tempo de execução como BigDecimal("0")
seria. Será mais rápido e não vai exigir a criação de um novo objeto.
Se o seu código precisa ser executado no pré-1.5, em seguida, você pode usar o (muito criticado) padrão Singleton para criar um objeto equivalente a BigDecimal.ZERO
. A primeira vez que é usado, ele chamaria BigDecimal("0")
para criar um objeto zero, e retornar esse objeto em chamadas subseqüentes. Caso contrário, se o código está sendo executado em um sistema 1.5, o objeto singleton pode simplesmente voltar BigDecimal.ZERO
com nenhuma penalidade de tempo de execução.
Outras dicas
Usando ZERO não cria um novo objeto ou exigir qualquer análise. Definitivamente o caminho a percorrer.
Antes de falar sobre penalidades de tempo de execução, certifique-se de que este pedaço de assuntos de código. Configure profiling e medir o caso de uso completo.
No entanto, preferem Bigdecimal.ZERO
como é verificado em tempo de compilação enquanto você pode acidentalmente digitar new BigDecimal("9")
, que o compilador irá aceitar, mas que causará erros em sua aplicação.
Por curiosidade eu verifiquei para construtor para BigDecimal e não tem nenhum otimizações para a string "0". Então, definitivamente, sim, há uma diferença.