4

我有一个名为 users 的并发哈希图。我在其中有一些用户对象,其中包含一些不是 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 语句。这是我的日志:

在此处输入图像描述

你怎么看待这件事?

4

2 回答 2

6

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

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

于 2011-09-26T19:09:10.603 回答
4

您还没有显示所涉及的类型,但是有可能是id或者getId()是一个Integer而不是一个int?如果是这样,您将比较引用,因此您应该使用

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

比较对象的值IntegergetId如果可以返回null,请小心......

于 2011-09-26T19:09:30.777 回答