有人可以向我解释下一行代码中会发生什么以及它为什么会起作用?
Integer[] myray = {1,2,3,4,5};
List<Integer> l = new ArrayList<Integer>(Arrays.asList(myray));
l.add(6);
System.out.println(l);
上面的代码运行正常。它将数组转换为列表,然后添加另一个元素。 但以下代码不起作用
Integer[] myray = {1,2,3,4,5};
List<Integer> l = (Arrays.asList(myray));
l.add(6);
System.out.println(l);
上面的代码给出了以下错误: 线程“main”中的异常java.lang.UnsupportedOperationException 有人可以告诉我两次转换之间的区别以及为什么只有第一次转换? 提前致谢
答案 0 :(得分:4)
Arrays.asList(myray)
返回由数组支持的固定大小的List
实现(java.util.Arrays.ArrayList
),因此您无法向其添加元素(或从中删除元素)。< / p>
当您创建新的java.util.ArrayList
并向其构造函数传递来自List
的固定大小的Arrays.asList
时(正如您在第一个代码段中所做的那样),您将获得正常java.util.ArrayList
1}}你可以添加元素。
答案 1 :(得分:1)
因为来自asList
类的Arrays
方法会返回一个不可变列表,您无法修改该列表。它只是可读的。
这是同一个
的docs返回由指定数组支持的固定大小的列表。
在第一种情况下,您没有直接使用它并且围绕它创建新列表。
new ArrayList<Integer>(Arrays.asList(myray));
当你在内部执行此操作时,元素只会获得复制,并且您将获得ArrayList的常规实例。