ボックス化
Javaや.NET Frameworkなどの環境においては、値型(Javaではプリミティブ型がこれに相当する)と参照型という根本的に異なる二種類の型が存在する。参照型のインスタンスはヒープ上の独立した領域に確保される。値型は文脈によって確保される場所は異なるものの、いずれにせよメモリ上に連続的に確保される(例えば、ローカル変数として宣言された場合はスタック上に確保され、参照型のメンバとして宣言された場合は参照型の一部として確保される)。
このように値型と参照型とは根本的に性質の異なるものであるが、さまざまな理由により、値型を参照型に型変換して運用することが必要となる場合がある。Javaにおいて整数型や浮動小数点数型といったプリミティブ型はオブジェクト(java.lang.Object派生型)ではなく、配列以外のコレクションにプリミティブ型を直接格納することができないため、一度参照型(java.lang.Object派生型)でラッピング(包含)してから格納する必要がある。このラッピング処理をボックス化と呼ぶ。各プリミティブ型をラップするための専用クラス(プリミティブラッパークラス)は標準Javaクラスライブラリに用意されているため、プログラマが自ら定義する必要はない。
前述のボックス化・ボックス化解除の操作を暗黙的に行なうことを、自動ボックス化(autoboxing)および自動ボックス化解除(auto-unboxing)と呼ぶ。
自動ボックス化はJava SE 5 (J2SE 5.0, Java 1.5) で追加され、JSR 201で宣言されている。自動ボックス化がサポートされた処理系では、対となる逆の操作、自動ボックス化解除もサポートされる。
以下のコードは自動ボックス化・自動ボックス化解除の例である。
Javaコンパイラによって、プリミティブ型とプリミティブラッパークラス間の暗黙変換は、前述のようなボックス化・ボックス化解除を実行するコードに展開される。