使用equals时犯得错

     错误源码:     
     BigDecimal bci345 = chb5.getBci345();
     if(Bci302.NC.equals(bci302)){

           if(!NullFlag.isObjNull(bci345)&& !"0".equals(bci345)){                          
               chc1.setBci338(chc1.getBci307());
               chc1.setBci339(chc1.getBci310());                    
          }
     }

     今天客户跟我反馈不管前台bci345传入的数据是不是等0,结果都是一样的,于是我检查了上面那段代码。第一眼看上去感觉没问题啊,有判断是是否等于0 啊!

      用测试数据跟踪了一遍,确实是否为0 都会进入循环。我想难道BigDecimal数据这样没有取出来,于是我试着换了一种写法:

    BigDecimal bci345 = chb5.getBci345();
     if(Bci302.NC.equals(bci302)){

           if(!NullFlag.isObjNull(bci345)&& !"0".equals(bci345.intValue())){                          
               chc1.setBci338(chc1.getBci307());
               chc1.setBci339(chc1.getBci310());                   
          }
     }

    也还是不行,这时候我突然想到“0”是String型的,而bci435是数值这样比对能行吗?

     于是我试着使用数值的比对

    BigDecimal bci345 = chb5.getBci345();
     if(Bci302.NC.equals(bci302)){

           if(!NullFlag.isObjNull(bci345)&&0 != bci345.intValue()){                          
               chc1.setBci338(chc1.getBci307());
               chc1.setBci339(chc1.getBci310());                   
          }
     }

    果然可以。我又试着这样比对

    BigDecimal bci345 = chb5.getBci345();
     if(Bci302.NC.equals(bci302)){

           if(!NullFlag.isObjNull(bci345)&&!"0".equals(bci345.toString())){                          
               chc1.setBci338(chc1.getBci307());
               chc1.setBci339(chc1.getBci310());                   
          }
     }

    也是可以的。

 

 

    我想问题的症结就在于equls的比较规则:如果两个对象的类型一致,并且内容一致,则返回true。明显我这这段代码中的错误就是比对的对象类型是错误的。

 

 

 

 

 

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值