ConcurrentHashMap foreach循环问题

时间:2011-09-26 19:06:04

标签: java hashmap concurrenthashmap

我有一个名为users的concurrenthashmap。我有一些用户对象,其中包含一些不是id的整数键。我想找到具有给定ID的用户。因此,我检查hashmap的所有元素并返回用户对象(如果存在)。这是我的代码:

    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

你怎么看?

2 个答案:

答案 0 :(得分:6)

从User.getId()方法返回什么类型以及什么类型的id变量?如果它不是基本类型,则需要使用equals()而不是==。

顺便说一句,像FindBugs这样的好静态代码分析器可以找到这种错误。

答案 1 :(得分:4)

您尚未显示所涉及的类型,但idgetId()可能是Integer而不是int吗?如果是这样,您将比较引用,因此您应该只使用

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

比较 Integer个对象中的值。如果getId可以返回null,请注意......