BigInteger или нет BigInteger? - PullRequest
11 голосов
/ 06 мая 2010

В Java большинство примитивных типов подписаны (один бит используется для представления +/-), и поэтому, когда я превышаю пределы типа, я могу получить неожиданные результаты, такие как отрицательные числа.

Есть ли лучшее решение, чем использование BigInteger для этого, поскольку у BigInteger есть проблемы с производительностью, и вам нужно использовать методы класса для базовой арифметики вместо операторов языка (разрушает читабельность)?

Ответы [ 3 ]

12 голосов
/ 06 мая 2010

Нет, лучшего решения не существует.Если вы работаете со значениями, которые не вписываются в long или double, вам нужно будет использовать ссылочный тип, например BigInteger, а Java не поддерживает перегрузку операторов.

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

5 голосов
/ 06 мая 2010

Scala - действительно решение здесь. В этом языке «операторы» на самом деле являются просто фиксированными методами и могут быть определены для произвольных классов. Ведь в вашем случае они уже есть в стандартной библиотеке. Таким образом, вы можете использовать специальные представления чисел, но чистый синтаксис примитивных типов Java.

Scala защищен в бою и будет полностью совместим с вашим кодом Java.

1 голос
/ 06 мая 2010

Единственный способ сохранить красивую логику бизнеса - это использовать язык сценариев, который вы компилируете в классы Java.Внутри вы можете использовать BigIntegers.

...