今天工作突然遇到一個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(基本數據類型)。
路漫漫其修遠兮,吾將上下而求索!