BigInteger хранит целое число как массив big-endian из 32-битных целых чисел, а знака отдельно как другое 32-битовое целое.
int signum
int[] mag
Но, как говорит Мухд, если число может поместиться в 64-битное целое число, то это используется вместо BigInteger.
Ответ 2
Значительные цифры номера хранятся в длинном, если количество цифр достаточно, чтобы соответствовать длине, иначе они сохраняются в BigInteger. Кроме того, BigDecimal имеет int примитивы для представления масштаба и точности, масштаб, указывающий количество значащих цифр справа от десятичной точки, а также точность, указывающую количество значащих цифр в числе.