![]()
Как работает кеширование при операции autoboxing?
Начиная с Java 1.5, для целочисленных значений в диапазоне от -128 до + 127 объекты-обёртки кешируются внутри для повторного использования.
В классе-обёртке Integer есть внутренний класс IntegerCache. Он объявлен как private static. В этом внутреннем классе кешированные объекты находятся в массиве cache[]. Кеширование выполняется при первом использовании класса-обёртки. После первого использования, вместо создания нового экземпляра (кроме использования конструктора), используются кешированные объекты.
Код метода valueOf() класса Integer выгдядит так:
![]()
Кэширование касается не только класса-оболочки Integer. Имеются аналогичные реализации кеширования для других классов-оболочек целочисленных типов:
ByteCache, ShortCache, LongCache, CharacterCache.
Кешированные объекты не используются при создании объекта-обёртки с помощью конструктора.
На хабре есть статья, в которой SSiarhei (предполагаю, что крутой программист, потому что сдавал экзамен Oracle Certified Professional Java Programmer), в 2011 году написал:
https://habr.com/ru/post/111189/
![]()
Так что происходит на самом деле?
Есть ли Integer пул, и если да, то какую роль он играет?