Подтвердить что ты не робот

Код Java с использованием HashSet longs не работает?

Этот простой код 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
4b9b3361

Ответ 1

В вашем наборе содержатся экземпляры Long, и вы искали Integer (тип, в который помещается int, когда требуется Object).

Тест

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

или

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

Ответ 2

Когда вы говорите s.contains(2), он ищет 2, который по умолчанию является int, который помещается в поле Integer. Но объект, который вы сохранили, был Long. Таким образом, он возвращает false

Попробуйте вместо этого использовать s.contains(Long.valueOf(2)).

Ответ 3

Ваш Hashset хранит объект Long, а не int/Integer. Вы пытаетесь получить Integer, где int помещается в бокс, когда требуется объект.