为什么 list add 后加进去的 两条数据是不一样,
按理说 这个 tempUSer 引用类型 list 执行add操作 只是在list加了一个引用
还是讲 new user之后 ,在内存中重新开辟了一个位置??
20 回答
繁星coding
TA贡献1797条经验 获得超4个赞
每次循环都new了一个新对象,意味着内存又新分配了一块地址,而每次存入的值也都不一样,此时list中是两个不一样的对象不一样的数据,如果每次存入的值一样,此时list中是两个不一样的对象一样的数据。综上所述,你本身问的问题就是有问题的,你只能说这样对象是不同的,数据相不相同要取决在set时给的是什么值。以上纯属个人观点,如有不对的地方,请多包涵!
烙印99
TA贡献1829条经验 获得超13个赞
@何必怀念As: 第一次循环时
栈 堆
(tempUser)address1 ----------> user1
^
list1[0]----------------------------|
第二次循环时
栈 堆
list1[0]---------------------------->user1
(tempUser)address2 --------------> user2
^
list1[1]--------------------------------|
白猪掌柜的
TA贡献1893条经验 获得超10个赞
@何必怀念As: 我知道不是 同一个 我赋值同一个,你自己都说不是同一个了.为什么还赋值同一个
而且你凭什么认为 第二次的应该会覆盖第一次的啊
别纠结这种不在你能力范围内的问题.有这功夫买本C程序设计.从头到尾看完.指针学完也就不会有这种问题了.
慕的地8271018
TA贡献1796条经验 获得超4个赞
@何必怀念As: tempUser是变量....你以为他是常量吗...你都给他赋值2次了.凭什么他就得是同一个?
不要想太多.如果你想他是同一个.就把new user放到循环外面.那就是你想要的了
MM们
TA贡献1886条经验 获得超2个赞
@何必怀念As: 循环中第一次tempUser的赋值把它指向了名字为tome的user(堆中),然后后面告诉list1,我这里有个地址(栈上),指向堆中的user,你加进去吧,然后list1[0]指向了这个user(堆中)。
第二次,tempUser的指向改为名字为lily的user,然后再告诉list1...。
- 20 回答
- 0 关注
- 369 浏览
添加回答
举报
0/150
提交
取消