Java BigInteger 的基本概念与使用场景
在 Java 开发中,基本数据类型(如 int、long)的取值范围有限,int 的最大值为 2^31-1,long 的最大值为 2^63-1,当需要处理超大整数运算时(如加密算法、高精度计算等),这些类型显然无法满足需求,为此,Java 提供了 BigInteger 类,它位于 java.math 包中,可以表示任意大小的整数,并支持各种算术运算、比较操作和位运算。

如何创建 BigInteger 对象
使用 BigInteger 时,首先需要创建其实例,常见的创建方式有两种:
-
通过字符串构造:
BigInteger num1 = new BigInteger("12345678901234567890");注意:字符串必须为有效的整数格式,否则会抛出
NumberFormatException。 -
通过基本类型转换:
BigInteger num2 = BigInteger.valueOf(1234567890L);
此方法适用于数值在
long范围内的情况,超过范围的数值需使用字符串构造。
基本算术运算
BigInteger 提供了丰富的算术运算方法,这些方法会返回新的 BigInteger 对象,而非修改原对象(因为 BigInteger 是不可变的)。
-
加法、减法、乘法:

BigInteger sum = num1.add(num2); // 加法 BigInteger diff = num1.subtract(num2); // 减法 BigInteger product = num1.multiply(num2); // 乘法
-
除法与取余:
BigInteger quotient = num1.divide(num2); // 除法(向下取整) BigInteger remainder = num1.remainder(num2); // 取余
若需同时获取商和余数,可使用
divideAndRemainder方法,返回一个包含两个元素的BigInteger数组。 -
幂运算与绝对值:
BigInteger power = num1.pow(3); // 幂运算 BigInteger abs = num1.abs(); // 绝对值
比较与位运算
BigInteger 支持整数比较和位操作,适用于逻辑判断和底层算法实现。
-
比较大小:
int result = num1.compareTo(num2); // 返回 -1、0、1,分别表示小于、等于、大于 boolean isEqual = num1.equals(num2); // 判断是否相等
-
位运算:
BigInteger and = num1.and(num2); // 按位与 BigInteger or = num1.or(num2); // 按位或 BigInteger xor = num1.xor(num2); // 按位异或 BigInteger shiftLeft = num1.shiftLeft(2); // 左移(乘以 4) BigInteger shiftRight = num1.shiftRight(2); // 右移(除以 4,向下取整)
高级功能:最大公约数与素数判断
BigInteger 还提供了数学运算中常用的功能:

-
最大公约数(GCD):
BigInteger gcd = num1.gcd(num2); // 计算最大公约数
-
素数判断与生成随机素数:
boolean isPrime = num1.isProbablePrime(10); // 概率性判断素数,参数为精度 BigInteger prime = BigInteger.probablePrime(64, new Random()); // 生成 64 位随机素数
性能注意事项
尽管 BigInteger 功能强大,但其性能远低于基本数据类型,因为所有运算都通过模拟实现,而非硬件支持,在性能敏感的场景中,应优先考虑基本数据类型,仅在必要时使用 BigInteger,频繁创建 BigInteger 对象可能增加内存开销,建议重用对象或使用临时变量存储中间结果。
BigInteger 是 Java 中处理超大整数运算的核心工具,通过其提供的丰富 API,可以轻松实现高精度计算、加密算法等复杂功能,合理使用构造方法、算术运算和高级功能,能够高效解决基本数据类型无法满足的场景需求,但在开发中需权衡性能与功能,避免滥用导致的性能问题。
















