2011-09-26 13 views
4

사용자라고하는 concurrenthashmap이 있습니다. ID가 아닌 정수 키가있는 사용자 개체가 있습니다. 주어진 ID로 사용자를 찾고 싶습니다. 따라서 hashmap의 모든 요소를 ​​검사하여 사용자 개체가 있으면 반환합니다. 여기 내 코드입니다 :ConcurrentHashMap foreach 루프 문제

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

당신이 그것에 대해 어떻게 생각하십니까

?

답변

6

User.getId() 메소드에서 반환 된 유형과 어떤 유형의 id 변수입니까? 기본 유형이 아닌 경우 == 대신 equals()를 사용해야합니다.

그런데 좋은 정적 코드 분석기 인 FindBugs은 이러한 종류의 오류를 발견 할 수 있습니다.

+0

당신 말이 맞습니다. 그들은 길다. 나는 평등을 사용해야했다. 때로는 사실을 비교하는 방법을 설명합니다. 나는 지금 시험해 볼 것이다. – aykut

4

관련 유형을 표시하지 않았지만 int 대신 id 또는 getId()Integer 일 수 있습니까? 그렇다면, 당신은 참조 비교됩니다, 그래서 당신은 단지

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

Integer 개체 내에서 값을 을 비교하는 데 사용해야합니다. getId이 null을 돌려 줄 수있는 경우 조심하십시오 ...