是的,第一次是开辟了一个,第二次的时候又重新开辟了一个。
你别逗我了
@何必怀念As: 循环了两次,new了两次,开辟了两次内存,只不过第二次的时候tempUser指向了新的这个内存。
list[0]是不会等于list1[0]的,因为user是引用类型,'=='在比较引用类型的时候比较的是在内存中的位置,或者说是不是同一个引用,并不是单纯的比较里面存储的值。
@何必怀念As 你这小伙子我就看不过去了,人家跟你解说好好听着就是,知道什么叫谦虚吗?就你这品行,走不了多远的路的,别得瑟,你知道的那点东西有的人不屑和你解释,既然跟你解释,你就好好学就是!
@何必怀念As 年轻人问人问题请加上请问,没有人要义务回答你
@路人第十三:
这个应该能表达我的意思了把 每次复制都不是给 list 中的地址 而是给 tempUser的地址
@IT民工-杰: 我懂你的意思,我是需要正确的答案 我会端正态度的,谢啦
这个
你可能是以为tempUser=new user() 只有一行所以只执行了一次吧...
这是什么意思?
@何必怀念As: 如果你知道执行了2次.为什么会觉得只new出来一个user对象..
@吴瑞祥: 我知道是循环两次 ,问的是list1【0】 为什么不等于list【1】
list add 两次都是添加对tempUser的引用啊
@何必怀念As: 循环中第一次tempUser的赋值把它指向了名字为tome的user(堆中),然后后面告诉list1,我这里有个地址(栈上),指向堆中的user,你加进去吧,然后list1[0]指向了这个user(堆中)。
第二次,tempUser的指向改为名字为lily的user,然后再告诉list1...。
@何必怀念As: 看错了,你两次循环都是创建了新user对象,但理解逻辑还是一样。每次创建user对象,tempUser指向它,list[0]再指向它。
@何必怀念As: tempUser是变量....你以为他是常量吗...你都给他赋值2次了.凭什么他就得是同一个?
不要想太多.如果你想他是同一个.就把new user放到循环外面.那就是你想要的了
他本身问的问题就有问题的
@吴瑞祥: 我知道不是 同一个 我赋值同一个,但是 第二次的应该会覆盖第一次的啊
@Daniel Cai: 你再看我另外发的一个图 现在不是指向某个对象 了把
@何必怀念As: 我知道不是 同一个 我赋值同一个,你自己都说不是同一个了.为什么还赋值同一个
而且你凭什么认为 第二次的应该会覆盖第一次的啊
别纠结这种不在你能力范围内的问题.有这功夫买本C程序设计.从头到尾看完.指针学完也就不会有这种问题了.
@吴瑞祥: 好吧
@何必怀念As: 第一次循环时
栈 堆
(tempUser)address1 ----------> user1
^
list1[0]----------------------------|
第二次循环时
栈 堆
list1[0]---------------------------->user1
(tempUser)address2 --------------> user2
^
list1[1]--------------------------------|
每次循环都new了一个新对象,意味着内存又新分配了一块地址,而每次存入的值也都不一样,此时list中是两个不一样的对象不一样的数据,如果每次存入的值一样,此时list中是两个不一样的对象一样的数据。综上所述,你本身问的问题就是有问题的,你只能说这样对象是不同的,数据相不相同要取决在set时给的是什么值。以上纯属个人观点,如有不对的地方,请多包涵!
巨硬的bug,去提交反馈吧
什么鬼
循环了两次,new 了两次。类是引用类型,比较的是内存地址。会不相等
如果用的是结构的话,则比较的是值,会每个字段进行比较,结果会相等