我有一个名为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语句。 这是我的日志:
你怎么看?
答案 0 :(得分:6)
从User.getId()方法返回什么类型以及什么类型的id变量?如果它不是基本类型,则需要使用equals()而不是==。
顺便说一句,像FindBugs这样的好静态代码分析器可以找到这种错误。
答案 1 :(得分:4)
您尚未显示所涉及的类型,但id
或getId()
可能是Integer
而不是int
吗?如果是这样,您将比较引用,因此您应该只使用
if (u.getId().equals(id))
比较 Integer
个对象中的值。如果getId
可以返回null,请注意......