使用longs的HashSet的Java代码不起作用?

时间:2013-06-03 16:44:46

标签: java long-integer hashset

这个简单的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

3 个答案:

答案 0 :(得分:21)

您的论坛包含Long的实例,而您正在寻找Integer(当需要int时,Object被加框的类型。

测试

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

System.out.println(s.contains(2L)); 

答案 1 :(得分:6)

当您说s.contains(2)时,它会搜索2,默认情况下为int,并将其设置为Integer。但是您存储的对象是Long。因此,它返回false

请尝试使用s.contains(Long.valueOf(2))

答案 2 :(得分:1)

您的Hashset存储Long的对象而不是int / Integer ..您正在尝试获取一个Integer,其中int被装箱,而需要Object。