Arrays.asList()にちょっとひいた

2012/02/27

 javaで配列をListに変換したいときにはArrays.asList()を使う。例えば、Stringの配列をListにするときはこんな感じ。

// Stringの配列をListにする
String[] array={"foo","bar","baz"};
List list = Arrays.asList(array);

 こうすると子要素に3つのStringをもったListがちゃんとできる。なのでlist.size()を吐かせると3になる。
 んだけども、これをintでやると挙動が変わる。

// intの配列をListにする
int[] array={1,2,3};
List list = Arrays.asList(array);

 この場合は子要素にはint[]が1つだけ作られる。list.size()を吐かせると1。
 気持ち悪くて調べてみたら可変長引数に配列を渡した場合の挙動がオブジェクト型とプリミティブ型で異なるようだ。知らなかった、、、この先あと3回はハマりそうなのでメモっておく。

※参考
Arrays.asList はプリミティブ型の配列をリスト化してくれない – にょきにょきブログ
[技術][Java]Arrays.asList()が変わっている – idesaku blog