java中处理远超long.max_value的大整数必须使用不可变的biginteger类,它基于int数组实现无限精度运算,需通过字符串、long值或字节数组等构造方法创建,所有运算均调用方法(如add、multiply),不可用运算符,比较用compareto,转换需注意溢出与null安全。

Java中处理远超Long.MAX_VALUE(约9.2×10¹⁸)的大整数,必须用BigInteger——它是不可变的任意精度整数类,底层基于int数组实现,支持无限精度运算。
构造BigInteger的常用方式
不能像基本类型那样直接赋值,必须通过构造方法或静态工厂方法创建:
- 从字符串构建(最安全):
BigInteger num = new BigInteger("123456789012345678901234567890");—— 避免long字面量溢出 - 从long转(仅限在long范围内):
BigInteger.valueOf(123L)—— 推荐用于小整数,性能更好 - 从字节数组(二进制表示):
new BigInteger(byte[])—— 常用于加密或序列化场景 - 生成随机大质数:
BigInteger.probablePrime(bitLength, random)—— 密码学常用
核心运算:替代+ - * / % 的方法调用
BigInteger没有重载运算符,所有计算都通过方法完成,返回新对象(因不可变):
- 加法:
a.add(b);减法:a.subtract(b) - 乘法:
a.multiply(b);除法:a.divide(b)(向零取整) - 取余:
a.remainder(b)(结果与被除数同号);模运算:a.mod(b)(要求b>0,结果∈[0,b) - 幂运算:
a.pow(n)(n必须≥0);GCD:a.gcd(b)
⚠️ 注意:divide遇到除零会抛ArithmeticException;mod不接受负模数。
比较、转换与格式化技巧
不能用==或>等比较运算符,必须调用对应方法:
- 比较大小:
a.compareTo(b)返回-1/0/1(类似String) - 转基本类型(有风险!):
a.longValue()截断高位,a.intValueExact()溢出时抛异常 - 转字符串:
a.toString()默认十进制;a.toString(16)可指定进制(2~36) - 判断奇偶:
a.testBit(0)(看最低位);判断正负:a.signum()(-1/0/1)
实战注意点:性能与陷阱
BigInteger高效但非零成本,日常开发中需规避常见误用:
- 避免在循环中频繁创建对象,如
sum = sum.add(val)是合理写法,但sum += val无法编译 - 不要用
equals()比较数值相等性(它已重写为数值比较),但务必注意null安全 - 解析字符串时确保格式合法,否则抛
NumberFormatException(如空串、含空格、非法字符) - 密码学场景优先用
modPow而非先pow再mod,避免中间值爆炸
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











