Це було дизайнерське рішення Java, яке вважають помилковим. Контейнери хочуть, щоб Об'єкти та примітиви не походять від Об'єкту.
Це одне місце, про яке дизайнери .NET дізналися з JVM та реалізували типи значень та загальну інформацію, так що бокс усувається у багатьох випадках. У CLR загальні контейнери можуть зберігати типи значень як частину основної структури контейнера.
Java вирішила додати загальну підтримку на 100% у компіляторі без підтримки JVM. JVM, який є тим, що він є, не підтримує об'єкт "без об'єкта". Java-дженерики дозволяють зробити вигляд, що немає обгортки, але ви все одно платите ціну продуктивності боксу. Це ВАЖЛИВО для певних класів програм.
Бокс - це технічний компроміс, і я вважаю, що це деталізація протікання мови. Автобоксинг є хорошим синтаксичним цукром, але все одно є покаранням за продуктивність. Якщо що, я хотів би, щоб компілятор попередив мене, коли він завантажується автоматично. (Наскільки я знаю, це може бути, я написав цю відповідь у 2010 році).
Хороше пояснення щодо ТА щодо боксу: Чому для деяких мов потрібні бокс та розпакування?
І критика Java-дженериків: Чому деякі стверджують, що реалізація генеричних файлів Java погана?
На захист Java легко дивитися назад і критикувати. JVM витримав випробування часом і багато в чому є хорошим дизайном.