Есть ли разница между BigDecimal(“0”) и BigDecimal.ZERO?

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Для сравнения или инициализации новой переменной имеет ли значение, какую из них вы используете?

Я знаю, что BigDecimal.ZERO — это функция версии 1.5, так что это вызывает беспокойство, но если я использую версию 1.5, имеет ли это значение?

Спасибо.

Это было полезно?

Решение

BigDecimal.ZERO является предопределенной константой, и поэтому ее не нужно вычислять из строки во время выполнения, поскольку BigDecimal("0") было бы.Это будет быстрее и не потребует создания нового объекта.

Если ваш код должен работать на версиях до 1.5, вы можете использовать (очень оклеветанный) шаблон Singleton для создания объекта, эквивалентного BigDecimal.ZERO.При первом использовании он вызовет BigDecimal("0") создать нулевой объект и вернуть этот объект при последующих вызовах.В противном случае, если ваш код работает в системе 1.5, ваш одноэлементный объект может просто вернуть BigDecimal.ZERO без штрафа за время выполнения.

Другие советы

Использование ZERO не создает новый объект и не требует какого-либо анализа.Определенно путь.

Прежде чем говорить о штрафах во время выполнения, убедитесь, что этот фрагмент кода имеет значение.Настройте профилирование и измерьте весь вариант использования.

Тем не менее, предпочитаю Bigdecimal.ZERO поскольку это проверяется во время компиляции, тогда как вы можете случайно ввести new BigDecimal("9"), который примет компилятор, но вызовет ошибки в вашем приложении.

Из любопытства я проверил конструктор на наличие BigDecimal, и он не имеет никаких оптимизаций для строки «0».Так что определенно да, разница есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top