BigInteger.ZERO、ONE、TEN 是 java.math.BigInteger 中预定义的不可变静态常量,分别表示 0、1、10,用于高效赋值、比较和运算,语义清晰、性能更优且线程安全。

BigInteger.ZERO、ONE、TEN 是 java.math.BigInteger 类中预定义的静态常量,分别代表整数 0、1、10 的不可变 BigInteger 实例。它们不是“魔法值”,而是为避免重复创建相同数值对象而提供的高效、安全的常量引用。
直接用于赋值和比较
无需调用构造方法,可直接赋值或参与运算,语义清晰且性能更好:
BigInteger zero = BigInteger.ZERO;-
if (num.equals(BigInteger.ZERO)) { ... }(注意:必须用equals(),不能用==) BigInteger one = BigInteger.ONE; // 比 new BigInteger("1") 更简洁、更快
作为运算的起点或边界值
在循环、递归或算法初始化时常用作初始值或终止条件:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 计算阶乘:
BigInteger result = BigInteger.ONE;,然后循环累乘 - 判断是否为正:
if (n.compareTo(BigInteger.ZERO) > 0) { ... } - 十进制转换或缩放:
n.multiply(BigInteger.TEN)相当于“×10”
避免误用:不要试图修改或重赋值
这些是 final 静态常量,指向不可变对象:
立即学习“Java免费学习笔记(深入)”;
- ❌ 错误:
BigInteger.ZERO = new BigInteger("42");(编译不通过) - ❌ 错误:
BigInteger.ZERO.add(BigInteger.ONE);不会改变 ZERO,而是返回新对象 - ✅ 正确:
BigInteger x = BigInteger.ZERO.add(BigInteger.ONE); // x 是新的 BigInteger(1)
对比手动创建,优势在哪?
使用常量比 new BigInteger("0") 或 BigInteger.valueOf(0) 更推荐:
- 更简洁、可读性高;
- 避免字符串解析开销(
"0"构造); - 比
valueOf()在小整数范围内更直接(虽然valueOf(0)也返回 ZERO,但常量写法意图更明确); - 线程安全,所有地方共享同一实例。

















