1.情景再现:
有个两表,假如分别叫表A、表B,它们都有一个字段存放着用户id。
现在用beanA和beanB来分别来对应表A和表B。
然后就判断这连个id字段是否相等,相等则进一步处理。
2.bug出现了
比较两个id是否相等的伪代码如下:
if (beadA.getId().eqauls(beanB.getId())) {
//TODO
}
结果没有任何相等的,但数据库中数据是有相等的,那么bug就出现。
问题是出在类型上。beanA中id的类型是String,beanB中id的类型是Long,所以以上代码中if条件永远都是false。
我这个问题还是比较隐蔽的,比较两个值是否相等嘛,但是没想到在bean中类型是不一样的,而且这里也没有任何提示。
以下为String类equals方法的源码:传入的是一个Object
3.解决方法:
if (beadA.getId().eqauls(beanB.getId() + "" )) {
//TODO
}