@ tunaranch правильный. Это также та же проблема, что и в этом Python вопросе . Суть в том, что Java сохраняет объект для целых чисел от -128 до 127 (Python делает от -5 до 256) и возвращает один и тот же объект каждый раз, когда вы его запрашиваете. Если вы попросите Integer за пределами этого фиксированного диапазона, он будет каждый раз давать вам новый объект.
(Напомним, что ==
возвращает, являются ли два объекта на самом деле одинаковыми, тогда как equals
сравнивает их содержимое.)
Редактировать : Вот соответствующий параграф из Раздел 5.1.7 Спецификация языка Java :
Если значение p в штучной упаковке равно true
,
false
, byte
, char
в диапазоне
\u0000
до \u007f
, или int или short
число от -128 до 127, то пусть
r1 и r2 будут результатами любых двух
конверсии бокса р. Это всегда
случай, когда r1 == r2 .
Обратите внимание, что это также описывает, что происходит с другими типами.