0

为什么在执行以下代码时出现异常。

  String[] array1 = {"A","B","C","D","E"};
  String[] array2 = {"F","G","H","I"}; 
  List<String> list = Arrays.asList(array1);
  list.addAll(Arrays.asList(array2)); //here getting exception

例外

 Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractCollection.addAll(Unknown Source)
at Sample6.main(Sample6.java:19)

但是这段代码运行良好。

List<String> list = new ArrayList<String>(Arrays.as.asList(array1));        
list.addAll(Arrays.asList(array2));

谢谢

4

2 回答 2

11

第一个案例

List<String> list = Arrays.asList(array1);
list.addAll(Arrays.asList(array2));

因为list 在第一种情况下是Unmodifiable(就大小而言)因为它是由asList方法返回的。

来自asList()的文档

返回由指定数组支持的固定大小的列表。

因此,当您直接引用它exception时,您最终会尝试修改它。

第二种情况

List<String> list = new ArrayList<String>(Arrays.as.asList(array1));

这里你不是list直接指的。您正在创建一个新的ArrayList并使用由返回的列表的数据Arrays.as.asList(array1),这不是Unmodifiable(就大小而言)。

于 2013-10-16T07:58:37.500 回答
1

Arrays.asList()

这总是返回一个不可修改的列表。

于 2013-10-16T08:03:39.287 回答