4

ユーザーと呼ばれる並行ハッシュマップがあります。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

関連するタイプを示していませんが、idorgetId()が のInteger代わりに である可能性はありintますか? もしそうなら、あなたは参照を比較しているので、単に使用するべきです

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

オブジェクト内の値を比較しIntegerます。getIdただし、null を返すことができる場合は注意してください...

于 2011-09-26T19:09:30.777 に答える