BigInteger不可变,需用add、subtract、multiply、divide等方法运算;创建用new BigInteger("str")或valueOf();取模用mod保证非负,remainder可为负;比较用compareTo。

Java 中的 BigInteger 是处理超出 long 范围的大整数的必备工具。它不可变、线程安全,所有运算都通过方法调用完成,没有操作符重载(比如不能直接写 a + b)。掌握几个核心方法,就能稳稳搞定加减乘除和取模。
创建 BigInteger 对象
不能直接用字面量,必须通过构造方法或静态工厂方法创建:
- 从字符串创建(最常用,避免精度丢失):
BigInteger num = new BigInteger("123456789012345678901234567890"); - 从 int/long 创建:
BigInteger.valueOf(123)(推荐,比new更高效) - 生成随机大数(测试用):
new BigInteger(100, new Random())(100 位二进制随机正数)
加减乘除:全部用方法,不支持 + - * /
所有算术运算都调用实例方法,返回新的 BigInteger(原对象不变):
-
加法:
a.add(b) -
减法:
a.subtract(b) -
乘法:
a.multiply(b) -
除法(商):
a.divide(b)—— 要求b != 0,且结果向零取整(如7.divide(3) → 2) -
取余(余数):
a.remainder(b)—— 符号与被除数a一致(-7.remainder(3) → -1)
注意:divide 和 remainder 都要求除数非零,否则抛 ArithmeticException。
更安全的除法与取模组合:divideAndRemainder
一次调用同时获得商和余数,返回长度为 2 的 BigInteger[],避免重复计算和不一致风险:
BigInteger[] result = a.divideAndRemainder(b); BigInteger quotient = result[0]; // 商 BigInteger remainder = result[1]; // 余数
特别适合需要同时用到商和余数的场景,比如大数进制转换、模幂算法预处理。
取模运算:用 mod 还是 remainder?
二者行为不同,选错容易出逻辑错误:
-
remainder(b):返回“余数”,可为负(符号同被除数) -
mod(b):返回“数学上的模”,结果恒为 非负,且满足0 ≤ result ;要求b > 0,否则抛异常
例如:new BigInteger("-7").remainder(new BigInteger("3")) → -1,而 new BigInteger("-7").mod(new BigInteger("3")) → 2。
密码学、哈希、环运算等场景必须用 mod 保证结果落在标准剩余系内。
不复杂但容易忽略:记住所有运算都返回新对象,原始值不会改变;比较大小用 compareTo(返回 -1/0/1),别用 == 或 equals 判相等(虽然 equals 也可用,但 compareTo == 0 更通用)。










