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