BigInteger.subtract() 返回新对象执行大整数减法,原对象不变;支持正负零运算、无精度损失;不可用“-”运算符,需判空防NullPointerException。

BigInteger.subtract() 是 Java 中用于执行大整数减法的标准方法,它返回一个新的 BigInteger 对象,表示调用对象减去参数后的结果,**原对象保持不变**(因为 BigInteger 是不可变类)。
基本用法:直接调用 subtract 方法
语法很简单:`bigInt1.subtract(bigInt2)`,等价于数学表达式 `bigInt1 - bigInt2`。注意参数不能为 null,否则抛出 NullPointerException。
- 支持正数、负数和零,自动处理符号逻辑(比如负减正、正减大正等)
- 结果精度无损失,不受 int/long 溢出限制
- 例如:
new BigInteger("100").subtract(new BigInteger("30"))返回70
常见减法场景与写法示例
实际编码中常结合字符串构造、变量引用或链式计算使用:
- 从字符串创建后相减:
BigInteger a = new BigInteger("99999999999999999999"); BigInteger b = new BigInteger("1"); BigInteger c = a.subtract(b); // 得到 99999999999999999998 - 链式调用(如连续减多个数):
a.subtract(b).subtract(c)相当于a - b - c - 减去负数相当于加法:
new BigInteger("5").subtract(new BigInteger("-3"))结果是8
注意事项:避免常见错误
使用时需留意几个关键细节:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
- 不能用
-运算符:Java 不支持BigInteger的运算符重载,写a - b会编译失败 - 结果始终是新对象:原值不会被修改,所以需要显式接收返回值
- 空指针风险:确保传入的参数非
null,必要时做判空处理 - 性能考虑:频繁创建
BigInteger对象可能带来开销,对性能敏感场景可复用或预计算
对比其他减法相关方法
除了 subtract(),BigInteger 还提供:
-
negate():返回相反数(相当于乘以 -1),可用于改写减法,如a.add(b.negate())等价于a.subtract(b) -
abs():取绝对值,配合signum()可手动实现带符号比较逻辑,但日常减法无需这么复杂
不复杂但容易忽略

















