Java: Сравнение значений Map не удается сравнить с более высокими значениями.Почему? - PullRequest
1 голос
/ 20 сентября 2019

Почему я получаю только сообщение "значение такое же", как вывод?Это из-за какого-то автобокса?

Код:

 Map<Character, Integer> pMap = new HashMap<>();
    Map<Character, Integer> sMap = new HashMap<>();
    char c = 'a';
    pMap.put(c, 10);
    sMap.put(c, 10);
    if (sMap.get(c) == pMap.get(c)) {
        System.out.println(c + " value is same");
    }
    char d = 'b';
    pMap.put(d, 10000);
    sMap.put(d, 10000);
    if (sMap.get(d) == pMap.get(d)) {
        System.out.println(d + " value is same");
    }

1 Ответ

3 голосов
/ 20 сентября 2019

Integer s являются типами объектов, поэтому для сравнения их следует использовать Integer::equals.Для Integer s в диапазоне [-128, 127] существует специальный пул целых чисел.Когда вы put свои int значения на карте, они помечаются Integer - следовательно, одинаковые значения на вашей карте, между [-128 , 127], будут ссылками на те же значения в Integer пуле.Вот почему == для [-128 , 127] значений возвращает true.Но обычно вы должны использовать equals здесь или выполнять распаковку явным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...