在 Java 里,BigDecimal 不能简单用 == 判等,而且“任意精度整数”也有两种常见理解,下面分情况说明。
BigDecimal 为什么不能直接 ==BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("10.00");
a == b; // false(比较的是对象引用)
即使数值相等,10 和 10.00 在 BigDecimal 中可能被当作不同精度。
compareToa.compareTo(b) == 0
✅ 推荐方式
10 和 10.00 判等equals(不推荐用于纯数值判等)a.equals(b)
❌ 问题:
10 ≠ 10.00new BigDecimal("10").equals(new BigDecimal("10.00")); // false
✅ 只有在值 + 精度都完全一致时才用 equals
如果你的意思是:
整数,但可能是任意大(超过 long 范围)
BigDecimal a = new BigDecimal("123456789012345678901234567890");
BigDecimal b = new BigDecimal("123456789012345678901234567890");
a.compareTo(b) == 0
✅ BigDecimal 本身支持任意精度
✅ compareTo 不会溢出
BigIntegerBigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = new BigInteger("123456789012345678901234567890");
a.equals(b); // ✅ 安全(BigInteger.equals 只看值)
BigInteger:
equals 就是数值相等| 场景 | 推荐方式 |
|---|---|
| 数值相等(忽略精度) | a.compareTo(b) == 0 |
| 值 + 精度都相等 | a.equals(b) |
| 任意精度整数 | BigDecimal.compareTo 或 BigInteger |
| 超过 long 的整数 | BigInteger |
如果你愿意,可以告诉我:
10 和 10.00 是否相等我可以给你更精确的建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。