これはJavaの設計上の決定であり、間違いと考える人もいます。コンテナーはオブジェクトを必要とし、プリミティブはオブジェクトから派生しません。
これは、.NET設計者がJVMから学び、多くの場合ボクシングが排除されるように値タイプとジェネリックを実装した1つの場所です。CLRでは、汎用コンテナーは、基になるコンテナー構造の一部として値型を格納できます。
Javaは、JVMからのサポートなしで、コンパイラーに汎用サポートを100%追加することを選択しました。JVMとは、「非オブジェクト」オブジェクトをサポートしていません。Javaジェネリックを使用すると、ラッパーがないように見せかけることができますが、ボクシングのパフォーマンスは犠牲になります。これは、特定のクラスのプログラムにとって重要です。
ボクシングは技術的な妥協であり、実装の詳細が言語に漏れていると感じています。オートボクシングは優れた構文上の砂糖ですが、それでもパフォーマンスが低下します。どちらかといえば、自動ボックス化するときにコンパイラーに警告を出してほしい。(私が知っているすべてのために、それは今かもしれません、私は2010年にこの回答を書きました)。
ボクシングに関するSOの良い説明:なぜ一部の言語ではボクシングとアンボクシングが必要なのですか?
Javaジェネリックに対する批判:ジェネリックの Javaの実装が悪いと主張する人がいるのはなぜですか?
Javaの防御では、後ろを向いて批判することは簡単です。JVMは時の試練に耐え、多くの点で優れた設計です。