看了一下api,上面说,上面说了“返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)”,注意括号里的话,于是猜测新产生的list实际上并没有在堆内存中重新开辟空间,而是指向了之前的数组?毕竟List的底层还是依靠数组实现的。如果真的是猜测的那样,那么对新生成的List的修改将同时导致原数组的修改,于是写了下面的代码。
- public static void main(String[] args) {
- String s[] = new String[]{"a", "b", "c"};
- System.out.println("原数组:");
- for(String st : s) {
- System.out.print(st + " ");
- }
- System.out.println();
- List<String> sList = Arrays.asList(s);
- //修改List
- sList.set(0, "b");
- System.out.println("修改List的值");
- System.out.println("原数组:");
- for(String st : s) {
- System.out.print(st + " ");
- }
- System.out.println();
- System.out.println("生成的list:");
- for(String st : sList) {
- System.out.print(st + " ");
- }
- System.out.println();
- }
复制代码
运行结果如下:
结果表明,猜测是对的。那么也就容易理解为什么已经是List了,但是仍然不能增删的原因了。
|