BigInteger的equals方法比较数值而非引用,传入null或非BigInteger类型返回false;推荐用常量调用避免空指针,与==和compareTo有本质区别。

BigInteger 的 equals 方法直接比较数值是否相等,不是比较引用,用法和普通对象一样,但要注意传入 null 或非 BigInteger 类型会返回 false。
equals 方法的基本用法
BigInteger 重写了 Object 的 equals 方法,内部比较的是两个大整数的**实际数值**,而不是对象地址。只要两个 BigInteger 表示的整数值相同,就返回 true。
- 调用方式:
big1.equals(big2) - 参数类型是
Object,所以可以传任意类型,但只有另一个BigInteger实例且值相等时才返回true - 如果传入
null或其他类型(比如String、Integer),一律返回false,不会抛异常
常见写法与注意事项
推荐始终用常量或确定非 null 的对象调用 equals,避免空指针风险:
- ✅ 安全写法:
BigInteger.ZERO.equals(a)或a.equals(BigInteger.ONE)(前提是 a 不为 null) - ❌ 危险写法:
a.equals(null)—— 虽不报错但返回 false;更糟的是a.equals(b)中 a 为 null 会直接抛NullPointerException - ⚠️ 不要和
==混淆:==比较的是引用,两个不同对象即使值相同也返回false
和 compareTo 方法的区别
当需要判断“相等”时,equals 最直观;但如果还要同时处理“大于”“小于”,用 compareTo 更高效(一次调用得三种结果):
立即学习“Java免费学习笔记(深入)”;
-
a.equals(b)→ 返回true或false -
a.compareTo(b) == 0→ 等价于equals,但返回0表示相等,-1表示小于,1表示大于 - 两者在功能上对相等性判断结果一致,但
compareTo是为排序设计的,equals是为集合(如 HashSet、HashMap)一致性设计的
简单示例代码
// 示例
BigInteger a = new BigInteger("12345678901234567890");
BigInteger b = new BigInteger("12345678901234567890");
BigInteger c = new BigInteger("12345678901234567891");
System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); // false
System.out.println(a.equals("12345678901234567890")); // false(类型不匹配)


















