¿Qué significa BigInteger sin límite?

Analicé esta pregunta de stackoverflow relacionada con Big Integer y específicamente no entiendo esta línea (las palabras en cursiva):

En la clase BigInteger, no tengo límites y hay algunas funciones útiles allí, pero es bastante deprimente convertir tu hermoso código para trabajar con la clase BigInteger, especialmente cuando los operadores primitivos no funcionan allí y debes usar funciones de esta clase .

No sé lo que me falta, pero para representar algo que no tiene límite, necesitaría una memoria infinita. ¿Cuál es el truco aquí?

No hay límite teórico La clase BigInteger asigna tanta memoria como necesita para todos los bits de datos que se le pide que contenga.

Sin embargo, existen algunos límites prácticos, dictados por la memoria disponible. Y existen límites técnicos adicionales, aunque es muy poco probable que se vean afectados: algunos métodos suponen que los bits son direccionables por índices int , por lo que las cosas comenzarán a romperse cuando Integer.MAX_VALUE bits Integer.MAX_VALUE .

Graham dio una gran respuesta a esta pregunta. Solo me gustaría añadir que hay que tener cuidado con el método valueOf porque se crea utilizando long parámetro long , por lo que el valor máximo es Long.MAX_VALUE .

Sí, se usa cuando necesitamos números muy grandes con precisión arbitraria. Es importante tener en cuenta que la precisión “arbitraria” o el número de dígitos no significa “ilimitado”: significa que el número de dígitos en un número o número de dígitos de precisión en un cálculo está limitado por la memoria y / o límites definidos de precisión que especificamos

Mire el código fuente de la clase BigInteger, verá (se puede hacer con NetBean). Un número se representará como un int arrays. Ejemplo, 10113 será [1, 0, 1, 1, 3] (esto no es exactamente lo que hace la clase BigInteger, solo un ejemplo de cómo funciona el gran número de módulos). Entonces, técnicamente, su único límite será tu memoria.