今天工作突然遇到一个bug,经过半个小时的奋斗才发现原来是等号的问题,下面部分代码:
public List<EarnedBean> totalSearch(String userId) {
List<EarnedBean> resList = new ArrayList<EarnedBean>();
Map<Long, Integer> tempMap = new HashMap<Long, Integer>();
EarnedBeanCriteria example = new EarnedBeanCriteria();
Criteria c = example.createCriteria();
List<EarnedBean> list = new ArrayList<EarnedBean>();
list = covertResType(list);
if (userId != null && !"".equals(userId)) {
c.andUidEqualTo(Long.valueOf(userId));
c.andStageEqualTo(Integer.valueOf(2));
list = earnedBeanMapper.selectByCriteria(example);
}
if (list != null && list.size() > 0) {
int size = list.size();
for (int i = 0; i < size; i++) {
int sumMoney = 0;
Long uid = list.get(i).getUid();
for (int j = 0; j < size; j++) {
Long tempUid = list.get(j).getUid();
if (uid.equals(tempUid)) {
int prizeLevel = list.get(j).getPrizeLevel();
if (prizeLevel == 1) {
sumMoney += 100;
} else if (prizeLevel == 2) {
sumMoney += 200;
} else if (prizeLevel == 3) {
sumMoney += 300;
} else if (prizeLevel == 4) {
sumMoney += 500;
}
}
}
tempMap.put(uid, sumMoney);
}
}
if (tempMap != null && tempMap.size() > 0) {
Iterator it = tempMap.keySet().iterator();
while (it.hasNext()) {
EarnedBean bean = new EarnedBean();
Long uid = (Long) it.next();
Integer sumMoney = tempMap.get(uid);
bean.setUid(uid);
bean.setCount(sumMoney);
resList.add(bean);
}
}
return resList;
}
}
上面这段代码有待加强,先不说就是
if (uid.equals(tempUid)) {
}
uid和tempUid的比较,原来我定音的uid和tempUid是Long类型(引用类型),之前用uid == tempUid 进行比较出现一点问题,后来在发现对引用类型来说,== 只是比较的内存中的地址而已,而不是比较内容,但是基本数据类型中,用 == 可以比较他们的内容,所以将代码修改为用equals比较就行了,或者将uid和tempUid定义为long(基本数据类型)。
路漫漫其修远兮,吾将上下而求索!