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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top