Разве Integer не является ссылкой? Почему inc не обновляет значение hashmap? - PullRequest
0 голосов
/ 07 мая 2018

Я ожидал, что следующие фрагменты эквивалентны:

Integer count = occurences.get(c);  
if(count == null) {  
   count = 0;  
   occurences.put(c, count);   
}  
++count;  

и

Integer count = occurences.get(c);  
if(count == null) {  
    count = 0;  
    occurences.put(c, count);  
}  
occurences.put(c, count + 1);  

Но когда я запускаю программу, первый фрагмент всегда имеет count как 0.
Это почему? Поскольку Integer является ссылкой в ​​HashMap, почему не отражается приращение, и мне нужно сделать put?

1 Ответ

0 голосов
/ 07 мая 2018

count является локальной переменной. Указывает на экземпляр неизменяемого класса Integer.

Когда вы увеличиваете его с помощью:

++count;

это просто синтаксический сахар для:

count = Integer.valueOf(count.intValue() + 1);

Вы переназначаете count. Вот и все.

...