当字符串表示的数字超出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 —— 它专为任意精度整数设计,可无损解析任意长度的十进制数字字符串:
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 是标准、安全、高效的解决方案;它不仅解决解析问题,更提供完整的算术、比较与位运算API,是处理大整数场景的首选工具。
立即学习“Java免费学习笔记(深入)”;