我有一个list,当我清除列表的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();发布于 2015-09-30 19:48:23
它会改变,因为当您添加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不要忘记,当您处理像String这样的不可变对象时,将在更改操作中创建一个新对象。您的旧对象仍在列表中,而其他地方则有新对象。
https://stackoverflow.com/questions/32874286
复制相似问题