Collections.toArray()JavaDoc中“安全”的含义是什么?

时间:2013-09-05 14:19:32

标签: java

当我阅读java源代码时,我发现在集合界面中,将是安全的

  

返回的数组将是“安全的”,因为没有对它的引用由此集合维护。(换句话说,即使此集合由数组支持,此方法也必须分配一个新数组。)调用者因此可以自由修改返回的数组。

我不明白其含义,你能为我提供一个例子吗?

2 个答案:

答案 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