Не забывайте, что, поскольку создание новой оболочки для каждого случая бокса довольно дорого, особенно учитывая, что она обычно используется в одной области действия метода, Автобокс использует пул общих оболочек.
На самом деле это реализация шаблона проектирования мухи . Когда для общеизвестного значения происходит упаковка, вместо создания нового экземпляра оболочки, предварительно созданный экземпляр извлекается из пула и возвращается.
Одним из следствий этого является: до сих пор не рекомендуется использовать автобокс для научных расчетов . Например, код d = a * b + c использует классы Integer для a, b, c и d, а сгенерированный код - d.valueOf (a.intValue () * b.intValue () + c.intValue ( )). Все эти вызовы методов имеют свои собственные издержки, поэтому обычно рекомендуется использовать автобокс при необходимости для хранения примитивов в коллекциях .
И даже тогда, если у вас есть огромная коллекция Integer wrapping int, накладные расходы могут означать более длительное время выполнения, вплоть до 20 раз больше , как сообщалось в эта статья .
Jb добавляет этот важный комментарий:
Также Wrapper.valueOf (примитив) использует пул оберток. Поэтому предпочитайте Integer.valueOf (5) новому Integer (5)