错误源码:
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。明显我这这段代码中的错误就是比对的对象类型是错误的。