Javaのまとめ記事です。
プリミティブ型、参照型
Javaではプリミティブ型(基本型)と参照型の2つの型があります。
プリミティブ型は8つあります。
そして8つのプリミティブ型それぞれに、参照型であるラッパークラスが存在します。
プリミティブ型 | ラッパークラス |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
このプリミティブ型とラッパークラスの変換を自動で行ってくれる仕組みがあります。
プリミティブ型からラッパークラスへの変換をオートボクシング、ラッパークラスからプリミティブ型への変換をアンボクシングといいます。
オートボクシング
プリミティブ型からラッパークラスへの自動変換をオートボクシングといいます。
int numInt = 10;
Integer numInteger = numInt;
int型で宣言されたnumIntをInteger型へ明示的に変換する必要がありません。
オートボクシングの機能を使わずに明示的に変換しようとすると以下のようになります。
int numInt = 10;
Integer numInteger = new Integer(numInt);
// または以下
Integer numInteger = Integer.valueOf(numInt);
アンボクシング
ラッパークラスからプリミティブ型への変換をアンボクシングといいます。
Integer numInteger = new Integer(10);
int numInt = numInteger;
こちらも、Integer型で宣言されたnumIntegerを明示的にint型へ変換する必要がありません。
アンボクシングの機能を使わずに明示的に変換しようとすると以下のようになります。
Integer numInteger = new Integer(10);
int numInt = numInteger.intValue();
気をつけたいこと
ラッパークラスは参照型のため、nullが入る可能性があります。
nullが入ったラッパークラスオブジェクトをアンボクシング機能を使ってプリミティブ型へ変換するとNullPointerExceptionが発生します。
Integer numInteger = null;
int numInt = numInteger; //実行時にNullPointerException発生
int numInt = numInteger;
のコードは実際は
int numInt = numInteger.intValue();
です。
numIntegerがnullのため、NullPointerExceptionが発生してしまいます。
上記は簡単なコードですが、実際のプログラムでもこのようにnullが格納された変数をアンボクシング機能でプリミティブ型へ変換する可能性はあります。
気をつけないと思わぬバグが入り込んでしまうことがあります。
Eclipseでの設定
オートボクシング、アンボクシングに対して警告を出せます。
ウィンドウ>設定>Java>コンパイラー>エラー/警告>潜在的なプログラミングの問題>ボクシングおよびアンボクシング変換