Es war eine Java-Entwurfsentscheidung, die einige als Fehler betrachten. Container möchten, dass Objekte und Grundelemente nicht von Object abgeleitet werden.
Dies ist ein Ort, den .NET-Designer von der JVM gelernt und Werttypen und Generika so implementiert haben, dass das Boxen in vielen Fällen entfällt. In CLR können generische Container Werttypen als Teil der zugrunde liegenden Container-Struktur speichern.
Java hat sich dafür entschieden, generische Unterstützung zu 100% im Compiler ohne Unterstützung durch die JVM hinzuzufügen. Die JVM, die das ist, was sie ist, unterstützt kein "Nicht-Objekt" -Objekt. Mit Java-Generika können Sie so tun, als gäbe es keinen Wrapper, aber Sie zahlen trotzdem den Leistungspreis für das Boxen. Dies ist für bestimmte Programmklassen WICHTIG.
Boxen ist ein technischer Kompromiss, und ich denke, es handelt sich um Implementierungsdetails, die in die Sprache gelangen. Autoboxing ist ein guter syntaktischer Zucker, aber immer noch ein Leistungsverlust. Wenn überhaupt, möchte ich, dass der Compiler mich warnt, wenn er Autoboxen erstellt. (Soweit ich weiß, habe ich diese Antwort jetzt 2010 geschrieben).
Eine gute Erklärung zu SO über das Boxen: Warum benötigen einige Sprachen Boxen und Unboxen?
Und Kritik an Java-Generika: Warum behaupten manche, dass Javas Implementierung von Generika schlecht ist?
Zu Javas Verteidigung ist es leicht, zurückzublicken und zu kritisieren. Die JVM hat den Test der Zeit überstanden und ist in vielerlei Hinsicht ein gutes Design.