javaarrayslistunboxing

Why list of objects throws an exception when trying to update it's value?


Why the following code throws ArrayStoreException on line 3:

int[] ar = {2, 4};
List list = Arrays.asList(ar);
list.set(0, 3);

Unboxing should be performed here from Integer to int but it doesn't.


Solution

  • You're assuming that Arrays.asList(ar) creates a List<Integer>, but that's wrong. Arrays.asList(int[]) creates a List<int[]>, and setting an element of type int in that array explains the ArrayStoreException (saving an int in an int[] array).

    If you want a List<Integer> with the same code, declare ar as Integer[]. This is probably another lesson to avoid using raw types (because the compiler would have prevented this runtime exception, had List<Integer> been used as the data type of list)