2011-09-26 186 views
4

我有一個名爲users的併發映射。我有用戶對象與一些不是ID的整數鍵。我想用給定的ID找到用戶。因此,我檢查hashmap的所有元素,並返回用戶對象(如果存在)。這裏是我的代碼:ConcurrentHashMap foreach循環問題

for(User u : users.values()) { 
     logger.error("u.getId() : " + u.getId()); 
     logger.error("id : " + id); 
     if(u.getId() == id) { 
      logger.error("match"); 
      return u; 
     } 
    } 
    logger.error("Not found: id:" + id); 
    for(User u : users.values()) { 
     logger.error(u.getPos() + ". user: " + u.getId()); 
    } 

然而,即使很難我的u.getId()和ID是相同的,我不能看到我的日誌「匹配」。

213匹配但它不能輸入以下if語句。 這裏是我的日誌:

enter image description here

你怎麼看呢?

回答

6

User.getId()方法返回的是什麼類型的id變量?如果它不是原始類型,則需要使用equals()而不是==。

順便說一句,一個好的靜態代碼分析器,如FindBugs可以找到這樣的錯誤。

+0

你是對的。他們很長。我應該用等於。並解釋了有時將它們進行比較。我現在就試試。 – aykut

4

您尚未顯示涉及的類型,但有可能是idgetId()Integer而不是int?如果是的話,你會比較引用,所以你應該只使用

if (u.getId().equals(id)) 

Integer比較對象的值。要小心,如果getId可以返回空,但...