このページではJavaのオートボクシングとアンボクシングについてお伝えしよう。
オートボクシングもアンボクシングもラッパークラスに関する用語だ。
オートボクシングとアンボクシング
オートボクシング、アンボクシングはJava5.0から提供された機能だ。
オートボクシングとは?
コンストラクタやメソッドなどを使わずに基本データ型の値を対応するラッパークラス内に格納するのがオートボクシングだ。
アンボクシングとは?
逆にラッパークラス内に格納された値を取り出して基本データ型として扱うのがアンボクシングである。
下記ページでお伝えした、Integer型でのサンプルコードをオートボクシング利用の記述に変更してみよう。
サンプルコード
それではサンプルコードを見てみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class JavaApp1 { public static void main(String[] args) { int num = 1000; String strNum = "2000"; Integer iNum1 = num;//[1] Integer iNum2 = Integer.valueOf(strNum); System.out.println("iNum1の値:" + iNum1.toString()); System.out.println("iNum2の値:" +iNum2.toString()); System.out.println("iNum1の値とiNum2の値が等しいか:" +iNum1.equals(iNum2)); int i = iNum1;//[2] System.out.println("iの値:" + i ); } } |
実行結果
1 2 3 4 |
iNum1の値:1000 iNum2の値:2000 iNum1の値とiNum2の値が等しいか:false iの値:1000 |
サンプルコードの説明
- [1] new演算子を使用せず、Integer型変数を代入してInteger型オブジェクトiNum1を生成。 → オートボクシング
- [2]Integerクラスのメソッドを使うことなくint型へ値を代入。→ アンボクシング
オブジェクトの生成を意識せずに記述できるので簡単ではある。ただ自動的に変換されているということは理解しておく必要がある。
また、ラッパークラスは参照型のため、nullが入る可能性がある。nullが入ったラッパークラスオブジェクトをアンボクシング機能にて基本型へ変換すると、プログラムを実行した際にエラー(NullPointerException)が発生するので注意してほしい。
まとめ
このページではオートボクシングとアンボクシングした。ラッパークラスの詳細については下記ページを参考にしてほしい。
コメント