Есть ли различие между BigDecimal (“0”) и BigDecimal. НУЛЬ?

Проблема в том, что вы модифицируете список, который вы повторяете в цикле for s in set1. Этого можно избежать, используя copy (), чтобы убедиться, что вы выполняете итерацию для отдельного экземпляра списка: for s in set1.copy(). Вы также можете ограничить длину цикла: for s in set1[:len(set1)]

26
задан MattGrommes 6 November 2008 в 18:05
поделиться

4 ответа

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

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

36
ответ дан 28 November 2019 в 06:51
поделиться

Используя НУЛЬ не создает новый объект или требует любого парсинга. Определенно способ пойти.

14
ответ дан 28 November 2019 в 06:51
поделиться

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

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

4
ответ дан 28 November 2019 в 06:51
поделиться

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

3
ответ дан 28 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: