我有一个列表,当我将列表的Notes属性添加到列表后,如下面的示例,它也清除了添加的stdList项。我真的不明白为什么?请帮帮我:(
List<Student> stdList = new List<Student>();
Student std = new Student();
std.Notes = new List<string>();
std.Notes.Add("EE");
stdList.Add(std);
std.Notes.Clear();
答案 0 :(得分:2)
它会发生变化,因为当您添加Student
对象时,它会添加对列表中对象的引用。您添加的引用仍将指向您修改的同一对象。因此,对象的任何更改都将反映在列表中。
以下是演示:
StringBuffer sb = new StringBuffer("aa");
List<StringBuffer> list = new ArrayList<StringBuffer>();
list.add(sb);
System.out.println(list);
sb.append("bb");
System.out.println(list);
sb = null;
System.out.println(list);
输出:
aa
aabb
aabb
不要忘记,当你处理像Strings这样不可变的对象时,会在更改操作上创建一个新对象。当你在其他地方找到一个新对象时,你的旧对象仍在列表中。