17

この単純な Java コードは2のセットに追加し、long続い2て がセットのメンバーであるかどうかを出力します。

import java.util.*;

class A {
    public static void main(String[] args) {
        HashSet<Long> s = new HashSet<Long>();
        long x = 2;
        s.add(x);
        System.out.println(s.contains(2));
    }
}

trueがセットに含まれているため、印刷する必要があります2が、代わりに を印刷しfalseます。なんで?

$ javac A.java && java A
false
4

3 に答える 3

24

あなたのセットには のインスタンスが含まれLongており、 を探していました( an が必要な場合に an がボックス化Integerされるタイプ)。intObject

テスト

System.out.println(s.contains(Long.valueOf(2))); 

また

System.out.println(s.contains(2L)); 
于 2013-06-03T16:46:24.367 に答える
6

と言うと、デフォルトで がs.contains(2)検索され、ボックス化されます。しかし、あなたが保管したオブジェクトは でした。それで、それは戻ります2intIntegerLongfalse

s.contains(Long.valueOf(2))代わりに使用してみてください。

于 2013-06-03T16:48:04.503 に答える
1

Hashset は、int/Integer ではなく Long のオブジェクトを格納します。オブジェクトが必要なときに int がボックス化されている Integer を取得しようとしています。

于 2013-06-03T16:46:46.477 に答える