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并且您正在寻找一个Integerint当需要 an 时将 an 装箱的类型Object)。

测试

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

或者

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

当您说s.contains(2)时,它会搜索2默认情况下是 的int,然后将其装箱为Integer。但是您存储的对象是Long. 所以,它返回false

尝试s.contains(Long.valueOf(2))改用。

于 2013-06-03T16:48:04.503 回答
1

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

于 2013-06-03T16:46:46.477 回答