Перегружается ли BigInteger?

В документах API говорится:

Все детали в Спецификации, касающиеся переполнения, игнорируются, поскольку BigIntegers сделаны настолько большими, насколько это необходимо для выполнения результатов операции.

Означает ли это, что BigInteger никогда не будет переполняться, если у вас будет достаточно памяти? Если да, то почему мы допускаем переполнение "типа", а некоторые нет?

Как язык развивается, будет ли он одобрять типы, которые скрывают переполняющий механизм от программистов?

Ответ 1

BigInteger никогда не будет переполняться, если у вас достаточно памяти для его обработки.

Чтобы ответить на вопрос о том, почему мы допускаем переполнение типов, а не другие:

BigInteger на самом деле не тип. Это класс. Это класс-оболочка, созданный для того, чтобы предоставить вам ту же функциональность, что и int, но позволяет использовать числа, которые вам нужны, без беспокойства о переполнении.

Типы переполняются, потому что они всего лишь пара байтов (точное количество зависит от типа) памяти, и как только этот небольшой объем памяти переполняется, так и номера.

Нет класса "переполнения", если он специально не предназначен для этого (или если у вас закончились ресурсы). Класс определяется с достаточной памятью для всего, что он содержит, что будет в основном ссылкой на другие классы или другие структуры данных.

Ответ 2

Вы читайте правильно, он никогда не переполнится. Хотя, он не будет создавать больше ОЗУ для вас:)

Семантика арифметических операций точно имитировать те из целых чисел Java арифметические операторы, как определено в Спецификация языка Java. Для Например, деление на ноль бросает Арифметическое исключение и разделение отрицательным положительным, дает отрицательный (или нулевой) остаток. Все подробности в Спецификации относительно переполнение игнорируется, так как BigIntegers сделаны настолько большими, насколько это необходимо для учитывать результаты операции.

Ответ 3

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

Ответ 4

Правильно, BigInteger никогда не переполняется, он использует программные операции и динамическое распределение для хранения чисел произвольного размера.

Как и во всех вычислениях, "произвольный размер" - это способ сказать "до тех пор, пока у вас не будет ресурсов из базовой системы".

Ответ 5

Если да, то почему мы допускаем переполнение "типа", а некоторые - нет?

Это полностью зависит от того, как оно поддерживается. Если это подкреплено, например, простой примитивой ванилью int, то она, очевидно, будет переполняться в Integer.MAX_VALUE. Примитивы имеют четкие границы переполнения, в то время как объекты для объектов зависят от того, как они защищены/запрограммированы.