Java言語のAutoboxing・Auto-Unboxing

Posted in java by o-taki on the 2008/10/24

JDK5から基本データ型とラッパークラスのデータ型を相互に自動変換してくれる Autoboxing・Auto-Unboxing という機能が使えるようになっていたらしい。

int a = 1;
Integer b = 2; // こういうのOK

int c = a + b;  // b (Integer) を自動的に int に変換してくれる
System.out.println(c); // => 3
Integer d = a + b;  // a (int) を自動的に Integer に変換してくれる
System.out.println(d); // => 3

ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(1); // ← int を Integer に変換しなくて良い

つまり、基本データ型かどうか気にしないでコレクションフレームワークに突っ込んでいいようだ。

だからといって、基本データ型に対してラッパークラスのメソッドを使うことはできない。

int a = 0;
Integer b = 0;

//System.out.println(a.getClass());  // これはコンパイルエラー
System.out.println(b.getClass());  // => "class java.lang.Integer"

ラッパークラスのデータ型はたぶん基本データ型と思って扱っても問題ない。

Integer a = 0;
int[] array = {0,1,2,3};

System.out.println(array[a]); // => 0, 配列の添え字OK
a++; // これもOK
System.out.println(array[a]); // => 1

ということで、もはや基本データ型とかいらなくね?っていう話。

Comment

Trackback URL