Есть ли разница между BigDecimal ( "0" ) и BigDecimal.ZERO?
Либо для сравнения, либо для инициализации новой переменной, имеет ли значение какой-либо из них, который вы используете?
Я знаю, что BigDecimal.ZERO - это функция 1.5, так что проблема, но если предположить, что я использую 1.5, это имеет значение?
Спасибо.
Ответы
Ответ 1
BigDecimal.ZERO
является предопределенной константой и поэтому не нужно оценивать ее из строки во время выполнения, поскольку BigDecimal("0")
будет. Это будет быстрее и не потребует создания нового объекта.
Если ваш код должен работать на pre-1.5, вы можете использовать (сильно клеветый) шаблон Singleton для создания объекта, эквивалентного BigDecimal.ZERO
. При первом использовании он вызывает BigDecimal("0")
для создания нулевого объекта и возвращает этот объект при последующих вызовах. В противном случае, если ваш код работает в системе 1.5, ваш объект singleton может просто вернуть BigDecimal.ZERO
без штрафа за выполнение.
Ответ 2
Использование ZERO не создает новый объект или не требует какого-либо разбора. Определенно, путь.
Ответ 3
Прежде чем говорить о штрафах во время исполнения, убедитесь, что этот кусок кода имеет значение. Настройте профилирование и измерьте полный вариант использования.
Тем не менее, предпочитайте Bigdecimal.ZERO
, как он проверял во время компиляции, тогда как вы можете случайно ввести new BigDecimal("9")
, который компилятор примет, но который вызовет ошибки в вашем приложении.
Ответ 4
Из любопытства я проверил конструктор для BigDecimal, и у него нет оптимизаций для строки "0". Так определенно да, есть разница.