Itu adalah keputusan desain Java, dan beberapa orang menganggapnya sebagai kesalahan. Wadah menginginkan Objek dan primitif tidak berasal dari Objek.
Ini adalah satu tempat dimana desainer .NET belajar dari JVM dan menerapkan tipe nilai dan generik sehingga tinju dihilangkan dalam banyak kasus. Di CLR, container generik dapat menyimpan tipe nilai sebagai bagian dari struktur container yang mendasarinya.
Java memilih untuk menambahkan dukungan generik 100% di kompiler tanpa dukungan dari JVM. JVM apa adanya, tidak mendukung objek "non-objek". Java generics memungkinkan Anda untuk berpura-pura tidak ada pembungkus, tetapi Anda tetap membayar harga kinerja tinju. Ini PENTING untuk kelas program tertentu.
Tinju adalah kompromi teknis, dan saya merasa ini adalah detail implementasi yang bocor ke dalam bahasa. Autoboxing adalah gula sintaksis yang bagus, tetapi masih merupakan penalti kinerja. Jika ada, saya ingin kompilator memperingatkan saya saat kotak otomatis. (Sejauh yang saya tahu, mungkin sekarang, saya menulis jawaban ini di tahun 2010).
Penjelasan yang bagus tentang SO tentang tinju: Mengapa beberapa bahasa membutuhkan Boxing dan Unboxing?
Dan kritik terhadap generik Java: Mengapa beberapa orang mengklaim bahwa implementasi Java generik buruk?
Dalam pembelaan Java, mudah untuk melihat ke belakang dan mengkritik. JVM telah bertahan dalam ujian waktu, dan merupakan desain yang baik dalam banyak hal.