
当字符串表示的数字超出long或int范围时,应使用biginteger类进行解析和比较,避免numberformatexception,同时支持任意精度的数值运算与关系判断。
当字符串表示的数字超出long或int范围时,应使用biginteger类进行解析和比较,避免numberformatexception,同时支持任意精度的数值运算与关系判断。
在Java中,处理超过 Long.MAX_VALUE(即 9,223,372,036,854,775,807)的超长数字字符串时,Long.parseLong() 或 Integer.parseInt() 会抛出 NumberFormatException,因为这些基本类型无法容纳如此大的整数。例如:
String num = "14151841515451321511151545"; // 26位数字,远超long范围 String num2 = "7845141651641616111"; // 19位数字,仍超出long(约1.8×10¹⁹)
✅ 正确做法是使用 java.math.BigInteger —— 它专为任意精度整数设计,可无损解析任意长度的十进制数字字符串:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
import java.math.BigInteger;
public class BigNumberComparison {
public static void main(String[] args) {
String num = "14151841515451321511151545";
String num2 = "7845141651641616111";
BigInteger bigNum = new BigInteger(num);
BigInteger bigNum2 = new BigInteger(num2);
// 比较大小(返回 -1/0/1,类似String.compareTo())
int comparison = bigNum.compareTo(bigNum2);
System.out.println("num > num2: " + (comparison > 0)); // true
// 判断相等
System.out.println("num equals num2: " + bigNum.equals(bigNum2)); // false
// 其他常用操作
System.out.println("Sum: " + bigNum.add(bigNum2));
System.out.println("Max: " + bigNum.max(bigNum2));
}
}
⚠️ 注意事项:
- BigInteger 构造函数不接受带前导空格、正负号以外的非数字字符(如逗号、空格、字母),否则抛出 NumberFormatException;若需容错解析,请先预处理字符串(如 str.replaceAll("[^\d-]", ""))。
- BigInteger 是不可变对象,所有运算(add, multiply, compareTo 等)均返回新实例,原对象不受影响。
- 若仅需字符串形式的数值比较(如排序),且确保两字符串均为非负、无前导零的纯数字,可先比长度,再逐字符比较——但此方式逻辑复杂、易出错,强烈推荐统一使用 BigInteger,兼顾正确性、可读性与扩展性。
总结:面对超长数字字符串,BigInteger 是标准、安全、高效的解决方案;它不仅解决解析问题,更提供完整的算术、比较与位运算API,是处理大整数场景的首选工具。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










