为什么在更改创建列表的数组时会修改列表 import java.util.*; 公开课考试{ 公共静态void main(字符串[]args){ 字符串[]arr={“Java”,“Champ”,““}; List=(List)数组。asList(arr);//第1行 arr[2]=“.com”;//第2行 for(字符串字:列表){ 系统输出打印(word); } } }

为什么在更改创建列表的数组时会修改列表 import java.util.*; 公开课考试{ 公共静态void main(字符串[]args){ 字符串[]arr={“Java”,“Champ”,““}; List=(List)数组。asList(arr);//第1行 arr[2]=“.com”;//第2行 for(字符串字:列表){ 系统输出打印(word); } } },java,collections,Java,Collections,有人能告诉我为什么我们要来“JavaChamp.com”吗? 我认为应该是“JavaChamp”,因为第2行在第1行之后。因为返回数组支持的固定大小的列表 这是以下文件: 返回指定数组支持的固定大小列表。(更改返回的列表“直写”到数组。)此方法与collection.toArray()相结合,充当基于数组和基于集合的API之间的桥梁。返回的列表可序列化,并实现随机访问 如果你想了解发生了什么,你可以看看代码。在你的例子中,让我们看看 java. UTI.java数组aslist(t…)< /c>

有人能告诉我为什么我们要来“JavaChamp.com”吗? 我认为应该是“JavaChamp”,因为第2行在第1行之后。

因为返回数组支持的固定大小的
列表

这是以下文件:

返回指定数组支持的固定大小列表。(更改返回的列表“直写”到数组。)此方法与
collection.toArray()
相结合,充当基于数组和基于集合的API之间的桥梁。返回的列表可序列化,并实现
随机访问


如果你想了解发生了什么,你可以看看代码。在你的例子中,让我们看看<代码> java. UTI.java数组aslist(t…)< /c> < /p>
@SafeVarargs
公共静态列表asList(T…var0){
返回新数组。ArrayList(var0);//注意
}
它返回一个名为“ArrayList”的内部类(不要与
java.util.ArrayList
混淆,它们是不同的类,但它们做的事情或多或少是相同的)

//内部类
私有静态类ArrayList扩展了AbstractList,实现了可序列化的随机访问{
私人决赛E[]a;
ArrayList(E[]var1){
this.a=Objects.requirennull(var1);//直接重用传入的数组
}
}
基于这段代码,我们看到数组被重用了。还需要注意的是,Java将按原样传递数组,而不是作为参数中的副本。这是什么意思

int[]arr={1,2,3,4,5};
修改阵列(arr);
断言arr[0]==2;//真的
void modifyArray(int[]数组){
数组[0]=2;
}
因此,我们可以确认我们将跨参数共享阵列实例。因此,当您从作用域中变异数组时,您间接地影响了
数组$ArrayList

相关的后备数组:“按原样传递”和“复制参数”通常被调用和。
import java.util.*;

public class Test {
    public static void main(String[] args) {
        String[] arr = {"Java", "Champ", "."};
        List<String> list = (List<String>) Arrays.asList(arr); // line 1
        arr[2] = ".com"; // line 2
        for (String word : list) {
            System.out.print(word);
        }
    }
}