首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目属性清除后的添加项值更改

项目属性清除后的添加项值更改
EN

Stack Overflow用户
提问于 2015-09-30 19:38:54
回答 1查看 64关注 0票数 2

我有一个list,当我清除列表的Notes属性之后,将它添加到列表中,就像下面的示例一样,它也清除了添加的stdList项。我真的不明白为什么?请帮助我:

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 19:48:23

它会改变,因为当您添加Student对象时,它会向列表中的对象添加一个引用。您添加的引用仍然指向您修改过的同一个对象。因此,对对象的任何更改都将反映在列表中。

下面是演示:

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
aa
aabb
aabb

不要忘记,当您处理像String这样的不可变对象时,将在更改操作中创建一个新对象。您的旧对象仍在列表中,而其他地方则有新对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32874286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档