Reputation: 563
I have a concurrenthashmap called users. I have user objects in it with some integer keys that is not id. I want to find the user with a given id. Therefore, I check all elements of hashmap and return the user object if it is present. Here is my code :
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());
}
However even tough my u.getId() and id are the same I cannot see "match" at my logs.
213 matches but It can not enter the following if statement. here are my logs:
What do you think about it?
Upvotes: 4
Views: 3000
Reputation: 31795
What type returned from User.getId() method and what type of id variable? If it is not a primitive type, you need to use equals() instead of ==.
By the way, a good static code analyzer like FindBugs can find such kind of errors.
Upvotes: 6
Reputation: 1503779
You haven't shown the types involved, but is it possible that id
or getId()
is an Integer
instead of an int
? If so, you'll be comparing references, so you should just use
if (u.getId().equals(id))
to compare the values within the Integer
objects. Be careful if getId
can return null though...
Upvotes: 4