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

BigInteger или не BigInteger?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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