当我阅读java源代码时,我发现在集合界面中,将是安全的
返回的数组将是“安全的”,因为没有对它的引用由此集合维护。(换句话说,即使此集合由数组支持,此方法也必须分配一个新数组。)调用者因此可以自由修改返回的数组。
我不明白其含义,你能为我提供一个例子吗?
答案 0 :(得分:14)
不确定
List<String> list = Arrays.asList("foo", "bar", "baz");
String[] array = list.toArray(new String[0]);
array[0] = "qux";
System.out.println(list.get(0)); // still "foo"
答案 1 :(得分:0)
此“安全”不是“绝对安全”。
如果您修改元素的字段,则列表将随着toArray()
返回的数组而改变。但是,如果将其指向另一个引用,则列表将不会随数组更改。
原因是toArray()
返回一个保存对象的内存地址的数组。
更改元素的内容
ArrayList<Student> a = new ArrayList<>();
a.add(new Student("Sarah",17));
Student[] s = a.toArray(new Student[0]);
s[0].setName("Lily");
System.out.println(a.get(0)==s[0]);//true
更改参考
这是源代码注释的“安全”。
ArrayList<Student> a = new ArrayList<>();
a.add(new Student("Sarah",17));
Student[] s = a.toArray(new Student[0]);
s[0]=new Student("Lily",20);
System.out.println(a.get(0)==s[0]);//false