Java中处理大整数防溢出应使用BigInteger,因其不受固定位宽限制、仅受内存约束;基本类型因位数固定(如int 32位、long 64位)会静默回绕;创建时据数值大小选valueOf()或字符串构造;运算须调用add()等方法;转换为基本类型需谨慎防精度丢失。

Java 中处理大整数运算防止溢出,核心是避开基本类型限制,改用 java.math.BigInteger。它不依赖固定位宽,只受内存约束,能精确表示任意大小的整数,彻底规避 int/long 溢出问题。
为什么基本类型会溢出?
int 是 32 位、最大值 2147483647;long 是 64 位、最大值 9223372036854775807。一旦计算结果超出范围,Java 不报错,而是“回绕”(比如 `Integer.MAX_VALUE + 1` 变成 `Integer.MIN_VALUE`),结果静默错误——阶乘、幂运算、大数累加等场景极易中招。
BigInteger 创建:选对方式才高效
• 小整数(在 long 范围内):优先用 BigInteger.valueOf(long),内部缓存 -16~16,性能好;
• 超大整数(如 100 位数字):必须用 new BigInteger("12345678901234567890..."),字符串构造,避免解析失败;
• 二进制/十六进制输入:可用 new BigInteger("1010", 2) 或 new BigInteger("FF", 16);
• 随机大数(如密码学):用 new BigInteger(int bitLength, Random)。
运算必须调用方法,不能用 + - * /
BigInteger 是不可变对象,所有运算都返回新实例:
• 加法:a.add(b)
• 减法:a.subtract(b)
• 乘法:a.multiply(b)
• 除法(向下取整):a.divide(b)
• 取余:a.remainder(b)
• 比较:a.compareTo(b)(返回 -1/0/1)
• 幂运算:a.pow(n)
和基本类型互转要谨慎
• 转 long/int:bigInt.longValue() 或 bigInt.intValue() —— 但会丢精度!仅当确认值在范围内才用;
• 安全检查:bigInt.bitLength() 可粗略判断是否能无损转 long;
• 转字符串:bigInt.toString() 最常用,无损;
• 不支持自动装箱,不能直接和 int/long 混算,必须全部转成 BigInteger 再操作。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











