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(基本数据类型)。

路漫漫其修远兮,吾将上下而求索!


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