技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

int型の配列に対する Arrays.asList().contains() は、意図通り動作しない。

Java で、int型の配列に特定の値が入っているかどうか確認するために、以下のようなコードを書いたら、意図通りに動かなかった。

int[] intArray = new int[]{0, 1, 2};
if (Arrays.asList(intArray).contains(1)) {
    System.out.print("Found from intArray"); // ここは出力されない。
}

デバッグしてみたところ、int型の配列に対して Arrays.asList() を適用すると、戻り値の List の最初の項目に int型の配列(全体)への参照が入ってしまうようだ。そして、List の2番目以降は存在しない。つまり、List の各項目として配列の各値が入るわけではない。(期待通りではない。)


以下のようにすると、意図通り動いた。

Integer[] intObjArray = new Integer[]{new Integer(0), new Integer(1), new Integer(2)};
if (Arrays.asList(intObjArray).contains(1)) {
    System.out.print("Found from intObjArray"); // ここは出力される。
}

Arrays.asList() に渡す配列は、オブジェクト型でないと、意図通りにならないのだと思う。