2011-09-26 182 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可以返回空,但...