Прежде всего, просто чтобы уточнить: создание массива ссылок на объекты - это , а не бокс. «Бокс» - это термин, имеющий очень специфическое значение в .NET, и я думаю, что стоит придерживаться его.
Бокс создает мусор, или, точнее, каждый раз, когда вы упаковываете его, он создает новый объект, который может в конечном итоге стать мусором. (У нет , чтобы стать мусором - у вас может быть ссылка на этот объект до конца жизни приложения; это просто довольно редко.)
Однако, вы могли бы иметь кеш для целей бокса. Действительно, Java делает для небольших чисел. Если вы напишите:
Integer x = 5;
Integer y = 5;
System.out.println(x == y); // Reference comparison
тогда это гарантированно напечатает true
.
Однако это всего лишь небольшой кеш для фиксированного набора типов - это не кеш общего назначения. Вам необходимо сбалансировать боль от наличия общего кэша со слабыми ссылками (не для подсчета ссылок - механизм GC в .NET просто не считается подсчетом ссылок, и вы не могли бы действительно ввести это просто для значений в штучной упаковке) почти наверняка повредит производительности, чем небольшая стоимость создания мусора.
.NET может использовать тот же подход, что и Java, и в штучной упаковке некоторые значения некоторых типов, но я не уверен, что это стоит дополнительных концептуальных багаж - особенно, когда платформа поддерживает пользовательские типы значений (чего нет в Java).
Вероятно, стоит отметить, что начиная с .NET 2.0, бокс несколько реже, чем раньше. При связывании и отражении данных такое случается довольно много, но теперь это не так часто встречается при обработке старых данных.