为了账号安全,请及时绑定邮箱和手机立即绑定

C# list 中add 的疑问

C# list 中add 的疑问

慕雪6442864 2018-12-06 22:39:49
为什么 list add 后加进去的 两条数据是不一样, 按理说 这个 tempUSer 引用类型 list 执行add操作 只是在list加了一个引用 还是讲 new  user之后  ,在内存中重新开辟了一个位置??
查看完整描述

20 回答

?
www说

TA贡献1775条经验 获得超8个赞

@吴瑞祥:  我知道不是 同一个  我赋值同一个,但是 第二次的应该会覆盖第一次的啊
查看完整回答
反对 回复 2018-12-09
?
jeck猫

TA贡献1909条经验 获得超7个赞

循环了两次,new 了两次。类是引用类型,比较的是内存地址。会不相等 如果用的是结构的话,则比较的是值,会每个字段进行比较,结果会相等
查看完整回答
反对 回复 2018-12-09
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

什么鬼 
查看完整回答
反对 回复 2018-12-09
?
萧十郎

TA贡献1815条经验 获得超13个赞

巨硬的bug,去提交反馈吧
查看完整回答
反对 回复 2018-12-09
?
繁星coding

TA贡献1797条经验 获得超4个赞

每次循环都new了一个新对象,意味着内存又新分配了一块地址,而每次存入的值也都不一样,此时list中是两个不一样的对象不一样的数据,如果每次存入的值一样,此时list中是两个不一样的对象一样的数据。综上所述,你本身问的问题就是有问题的,你只能说这样对象是不同的,数据相不相同要取决在set时给的是什么值。以上纯属个人观点,如有不对的地方,请多包涵!
查看完整回答
反对 回复 2018-12-09
?
烙印99

TA贡献1829条经验 获得超13个赞

@何必怀念As: 第一次循环时 栈                            堆 (tempUser)address1 ----------> user1                                                  ^ list1[0]----------------------------|   第二次循环时 栈                                               堆 list1[0]---------------------------->user1 (tempUser)address2 --------------> user2                                                        ^ list1[1]--------------------------------|
查看完整回答
反对 回复 2018-12-09
?
不负相思意

TA贡献1777条经验 获得超10个赞

@吴瑞祥:  好吧
查看完整回答
反对 回复 2018-12-09
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

@何必怀念As: 我知道不是 同一个  我赋值同一个,你自己都说不是同一个了.为什么还赋值同一个 而且你凭什么认为 第二次的应该会覆盖第一次的啊 别纠结这种不在你能力范围内的问题.有这功夫买本C程序设计.从头到尾看完.指针学完也就不会有这种问题了.
查看完整回答
反对 回复 2018-12-09
?
慕仙森

TA贡献1827条经验 获得超8个赞

@Daniel Cai: 你再看我另外发的一个图 现在不是指向某个对象 了把
查看完整回答
反对 回复 2018-12-09
?
阿晨1998

TA贡献2037条经验 获得超6个赞

是的,第一次是开辟了一个,第二次的时候又重新开辟了一个。
查看完整回答
反对 回复 2018-12-09
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

他本身问的问题就有问题的
查看完整回答
反对 回复 2018-12-09
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

@何必怀念As: tempUser是变量....你以为他是常量吗...你都给他赋值2次了.凭什么他就得是同一个? 不要想太多.如果你想他是同一个.就把new user放到循环外面.那就是你想要的了
查看完整回答
反对 回复 2018-12-09
?
温温酱

TA贡献1752条经验 获得超4个赞

@何必怀念As: 看错了,你两次循环都是创建了新user对象,但理解逻辑还是一样。每次创建user对象,tempUser指向它,list[0]再指向它。
查看完整回答
反对 回复 2018-12-09
?
MM们

TA贡献1886条经验 获得超2个赞

@何必怀念As: 循环中第一次tempUser的赋值把它指向了名字为tome的user(堆中),然后后面告诉list1,我这里有个地址(栈上),指向堆中的user,你加进去吧,然后list1[0]指向了这个user(堆中)。 第二次,tempUser的指向改为名字为lily的user,然后再告诉list1...。
查看完整回答
反对 回复 2018-12-09
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

@吴瑞祥:  我知道是循环两次 ,问的是list1【0】 为什么不等于list【1】
查看完整回答
反对 回复 2018-12-09
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

@何必怀念As: 如果你知道执行了2次.为什么会觉得只new出来一个user对象..
查看完整回答
反对 回复 2018-12-09
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

这是什么意思?
查看完整回答
反对 回复 2018-12-09
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

你可能是以为tempUser=new user() 只有一行所以只执行了一次吧...
查看完整回答
反对 回复 2018-12-09
  • 20 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信