这段简单的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发布于 2013-06-04 00:46:24
您的set包含Long的实例,并且您正在寻找Integer (需要Object时将int装箱到其中的类型)。
测试
System.out.println(s.contains(Long.valueOf(2))); 或
System.out.println(s.contains(2L)); 发布于 2013-06-04 00:48:05
当您说s.contains(2)时,它会搜索2,缺省情况下它是一个int,它被装箱为Integer。但是您存储的对象是Long。因此,它返回false
请尝试使用s.contains(Long.valueOf(2))。
发布于 2013-06-04 00:46:46
您的Hashset存储的对象为Long,而不是int/Integer。您正在尝试获取一个Integer,其中int是装箱的,而Object是必需的。
https://stackoverflow.com/questions/16901717
复制相似问题