Java等號的理解

今天工作突然遇到一個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(基本數據類型)。

路漫漫其修遠兮,吾將上下而求索!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章