阿里为什么不能使用 BigDecimal 的 equals 方法做等值比较?

本文探讨了在Java中为什么不能使用BigDecimal的equals方法进行等值比较,并通过示例解释了equals方法考虑值和标度导致的问题。推荐在进行BigDecimal数值比较时使用compareTo方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 前言

BigDecimal 是 java.math 包中提供的一种可以用来进行精确运算的类型。所以,在支付、电商等业务中,BigDecimal 的使用非常频繁。而且其内部自带了很多方法,如加,减,乘,除等运算方法都是可以直接调用的。

除了需要用 BigDecimal 表示数字和进行数字运算以外,代码中还经常需要对于数字进行相等判断。

说到等值比较,咱们先看看《阿里巴巴Java开发手册》中的要求:

那么为什么会有这样的要求呢~ 其中的奥秘是什么呢~

请各位小伙伴听我娓娓道来…

# BigDecimal 做等值比较

public static void main(String[] args) {
        BigDecimal bigDecimal1 = new BigDecimal(1);
        BigDecimal bigDecimal2 = new BigDecimal(1);


        if(bigDecimal1 == bigDecimal2){
            //等值比较
        }
    }

相信聪明的小伙伴一眼就可以看出来上面的代码是有问题的,因为 BigDecimal 是对象,不能使用 == 来做等值判断。

如果我们使用 BigDecimal 的 equals 方法做等值比较是不是可以呢?

public static void main(String[] args) {
        BigDecimal bigDecimal1 = new BigDecimal(1);
        BigDecimal bigDecimal2 = new BigDecimal(1);


        if(bigDecimal1.equals(bigDecimal2)){
            //等值比较
        }
    }

这里我先卖个关子,咱们跑跑代码来看看能不能用 BigDecimal 的 equals 方法做等值比较

public static void main(String[] args) {
        BigDecimal bi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值