Подтвердить что ты не робот

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

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

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

Спасибо.

4b9b3361

Ответ 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". Так определенно да, есть разница.