Acho que consegui entender…
Quando usamos o método asList para alimentar uma Lista através do array, tanto a lista quanto o array ficam ligados. Não sei, mas acredito que referênciam o mesmo objeto.
Como o array não é uma estrutura dinâmica, não podemos dar um lista.add(novoElemento), pois isto alteraria a estrutura do array.
Eu cheguei a esta conclusão quando fui utilizar o método List.toArray();
List<String> lista = new ArrayList<String>();
lista.add("Corinthians"); lista.add("Campeão Brasileiro 2009");
String [] arrayDeString = new String[3];
arrayDeString = lista.toArray(arrayDeString);
Neste caso, o método List.toArray(), tanto array quanto lista ficam independentes…
arrayDeString[1] = "Campeão da Libertadore 2010"; //Não altera a lista
lista.add("Campeão do Mundo 2010"); //Ok, não dá erro algum pois não altera o array
Resumindo pelo que entendi:
O método Arrays.asList(): a Lista referência o objeto Array. Não pode dar Lista.add() pois altera a estrutura do array e isso é impossível. Ocorre exceção de tempo de execução.
O método List.toArray(): Lista e array são independente. Pode dar List.add() que não ocorre problema.
É isso, não sei se está correto o que eu pensei, mas desta forma eu consegui entender.
Obrigado.