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?
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.
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...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With