Search code examples
javaarrayslistcopyautoboxing

why does auto-boxing and unboxing of integers does not work with Arrays.asList in Java?


The following is throws compile error:

int[] arrs = {1,2,4,3,5,6};
List<Integer> arry = Arrays.asList(arrs);

but this works:

for (Integer i : arrs){
   //do something
}

Auto-boxing works in many contexts, I just gave one example of for-loop above. but it fails in the List-view that I make in Arrays.asList().

Why does this fail and why is such as a design implementation chosen?


Solution

  • To make things work you need to use Integer[] instead of int[].

    Argument of asList is of type T... and generic types T can't represent primitive types int, so it will represent most specific Object class, which in this case is array type int[].
    That is why Arrays.asList(arrs); will try to return List<int[]> instead of List<int> or even List<Integer>.

    Some people expect automatic conversion from int[] to Integer[], but lets nor forget that autoboxing works only for primitive types, but arrays are not primitive types.