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") 更简洁、更快
作为运算的起点或边界值
在循环、递归或算法初始化时常用作初始值或终止条件:
- 计算阶乘:
BigInteger result = BigInteger.ONE;,然后循环累乘 - 判断是否为正:
if (n.compareTo(BigInteger.ZERO) > 0) { ... } - 十进制转换或缩放:
n.multiply(BigInteger.TEN)相当于“×10”
避免误用:不要试图修改或重赋值
这些是 final 静态常量,指向不可变对象:
- ❌ 错误:
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,但常量写法意图更明确); - 线程安全,所有地方共享同一实例。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











