オートボクシングとは、Java5から導入されたプリミティブ型とラッパークラスの変換を省略した記述形式を意味します。
オートボクシングには、プリミテイブ型からラッパークラスへ変換するボクシングと
ラッパークラスからプリミティブ型へ変換するアンボクシングがあります。
Java1.4系プリミティブ型とラッパークラス
//プリミティブ型からラッパークラスの生成
Integer i = new Integer(100);
今までプリミティブ型や文字列の章で説明させて頂いたようにプリミティブ型とラッパークラスの変換は、
上記ソースのように記述します。
ボクシング例
//プリミティブ型からラッパークラスの生成
Integer i = 100;
上記ボクシングの例のようにプリミティブ型から直接ラッパークラスを生成することができます。
記述量が減り、プリミティブ型からラッパークラスの生成がシームレスになりました。
8つのプリミティブ型(byte,short,int,long,float,double,char,boolean)とその対応するラッパークラス全て利用できます。
Java1.4系プリミティブ型とラッパークラス
//プリミティブ型からラッパークラスの生成
Integer i = new Integer(100);
//ラッパークラスからintへの変換
int i2 = i.intValue();
アンボクシング例
//プリミティブ型からラッパークラスの生成
Integer i = 100;
int i2 = i;
冗長的なhogeValue()メソッド文の記述量が減り、ラッパークラスからプリミティブ型の変換ががシームレスになりました。
8つのプリミティブ型(byte,short,int,long,float,double,char,boolean)とその対応するラッパークラス全て利用できます。
プリミティブ型の初期値はプリミティブ型一覧で示した値です。
対してラッパークラスの初期値はnullです。
初期値0とnullの意味は大きく異なります。nullはデータに初期値が設定されていない初期状態を意味します。
nullが存在することで、オブジェクトの初期化処理やデータの設定処理が実行されていない事を意味します。
この問題がオートボクシングでは顕著化します。
NullPointerException例
//プリミティブ型からラッパークラスの生成
Integer i = null;
int i2 = i; //NullPointerExceptionが起きる
これを回避するには、int i2に対して初期値0を明示するかiがnull出ない事をチェックする必要があります。
これは、私の15年の経験と持論になります。
java8などを用いて、java1.4系などの過去の資産が無い新規開発の場合には、
コーディング規約でオートボクシングの利用方法について明示して、全開発者へのコーディング規約の教育を徹底した上で
オートボクシングを利用する場合には、利用して良いと思います。
逆に過去の資産で1.4系の記述形式が存在する場合には、1.4系の記述形式を徹底させます。
重要な事は新しい文法で記述量が減り、生産性が増すとは限らない事です。
開発チームの開発者全員が基礎的な学習を習熟していた場合に効果がでる手法であり、
開発者の基礎的な習熟度にバラつきがある場合には、量が多くても厳格な1.4系の記述形式を推奨します。
java8ではラムダ式も含め、新しい構文が増え選択肢も増えました。
記述量が減る方向性や型の自動化などが表現できることは、2017時点のプログラムパラダイムと流れです。
ただし、その新しい簡略化された文法を用いる意味を突き詰めるとJava言語自体の言語の選択がどうかという所まで行きつきます。
JVMで動作する言語には、「Scala」や「Groovy」もあります。
エンジニアというのは不思議なもので必ず新しい文法を人より多く使いこなせるところに何故か優越感を感じるものです。
ただ新しい文法が使える事とシステム開発にとって良い方法とは別問題です。
結論といたしましては、新しい構文は基礎的な構文と新しい構文の動作を学習した上で、
開発チームでコーデイングルールを議論及び明示して利用するか否かを確定して下さい。