BigInteger专为超大整数精确运算设计,支持任意精度、不可变且线程安全,适用于金融计算、密码学、算法竞赛等需绝对精度的场景。

Java 中的 BigInteger 类专为超大整数运算而生,能精准处理远超 long 范围(±2⁶³−1)的整数,避免溢出和精度丢失。它不可变、线程安全,所有运算返回新对象,是金融计算、密码学、高精度算法等场景的可靠选择。
常用核心方法速查
构造与转换:
-
BigInteger(String val):最常用,从十进制字符串创建(如
new BigInteger("123456789012345678901234567890")) -
BigInteger(String val, int radix):支持任意进制(如二进制
new BigInteger("1101", 2)) - toString() 和 toString(int radix):转回字符串,可指定进制
- longValueExact():仅当值在 long 范围内才安全转 long,否则抛 ArithmeticException
基本算术运算:
- add(BigInteger val)、subtract()、multiply()、divide()、remainder()
-
pow(int exponent):仅支持非负整数次幂(如
bigNum.pow(100)) - negate():取相反数;abs():取绝对值
比较与判断:
- compareTo(BigInteger val):返回 -1/0/1(推荐用于比较,不用 equals 判相等)
- equals(Object x):判断数值是否相等(注意:new BigInteger("5") 和 new BigInteger("05") 相等)
- signum():返回 -1(负)、0(零)、1(正)
- isProbablePrime(int certainty):概率性素数判定,certainty 越高越可靠(常设 10–50)
典型应用场景
高精度财务计算:
银行利息、汇率换算、区块链交易额等严禁浮点误差的场合。例如计算复利时用 principal.multiply(rate.pow(years)),全程无舍入。
密码学基础运算:
RSA 密钥生成依赖大素数生成与模幂运算:base.modPow(exponent, modulus) 高效完成 aᵇ mod m,避免中间结果爆炸。
算法竞赛与数学问题:
阶乘(1000!)、斐波那契第 10000 项、大数进制转换、组合数 C(n,k) 计算等,直接使用 multiply / divide / mod 等方法即可实现,无需手动模拟竖式。
唯一 ID 或序列号生成:
将时间戳、机器号、序列号拼接成超长数字字符串再转为 BigInteger,便于后续做范围查询、分库分表键值计算或加密混淆。
使用注意事项
- 所有操作都新建对象,频繁运算注意内存与性能,避免链式调用过深(如 a.add(b).multiply(c).subtract(d))
- 除法 divide() 要求整除,否则抛 ArithmeticException;需截断商时用 divideToIntegralValue(),余数用 remainder()
- 不支持 + − * / 运算符重载,必须显式调用方法
- 初始化尽量用字符串,避免通过 long 构造再升级(如
BigInteger.valueOf(Long.MAX_VALUE + 1L)会出错)
BigInteger 不是万能替代品,日常计数、循环变量仍首选 int/long;但在需要“绝对精确”和“无限大小”的边界场景中,它是 Java 标准库给出的优雅答案。









