Вот это
Сравнение if(list.get(i).equals(list.get(i-1))) n++; нужно делать именно через equals так как сравниваются не примитивные типы а Integer, для класса Integer есть intовый пул но он до 128, соответственно если вы будете сравнивать вот так Integer == Integer то все будет работать для чисел до 128, если попытаться сравнить 129==129 то будет false. Последовательность 129, 129, .....129 (10 раз) даст в результате 1 повторение вместо 10.
или может ссылочку на материал почитать?
Александр
14 уровень
Кто может объяснить более подробно
Обсуждается
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Alexandr
3 января 2020, 22:23полезный
Объясню по пунктам, если какой-то пункт будет непонятен, то напиши номер.
1) В списке list хранятся ссылки на объект типа Integer.
2) intовый пул - означает, что для чисел до 128 в памяти сразу выделяется место и там хранятся объекты типа Integer со значениями до 128. (т.к. эти числа часто используются)
3) при создании объекта типа Integer если его значение будет до 128, то Java просто ничего не создаст, а использует уже существующий объект типа Integer, но если ты захочешь создать объект Integer со значением больше 128, то создастся новый объект в памяти
4) исходя из всего вышесказанного если ты создашь например объект Integer(12) хоть 20 раз, то все переменные будут ссылаться на один и то же объект в памяти и соответственно все эти объекты будут идентичны, но если ты создашь 3 раза объект Integer(150) (т.е. больше 128), то все три объекты будут разными объектами в памяти, но с одинаковым значением и сравнивая их через equals они будут равны друг другу, т.к. будут сравниваться значения, сравнивая их через == будут сравниваться объекты, а они разные.
Если есть вопросы - задавайте.
+6