Если мы посмотрим на источник для valueOf
, мы можем получить подсказку: Источник java.lang.Integer Строки 638-643:
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Похожекласс Integer поддерживает кэш объектов Integer для общих значений.Вместо того, чтобы создавать новый каждый раз, когда кто-то запрашивает valueOf
, он просто возвращает ссылку на тот, который уже существует.Поэтому, если вы вызовете Integer.valueOf(1)
несколько раз, вы получите каждый раз один и тот же объект обратно (не только эквивалентные объекты).