You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中创建Test对象后添加到列表,ListView为何非空且显示"c"?

Android中创建Test对象后添加到列表,ListView为何非空且显示"c"?

兄弟,我来帮你拆解这段代码的执行逻辑,你就能明白为啥会出现这个结果了~

先看代码的实际执行顺序

咱们把你的关键代码按步骤拆解:

// 1. 创建第一个Test对象,testt指向它,给a赋值"aa"
testt = new Test();
testt.a = "aa";

// 2. 这里重新创建了一个全新的Test对象,testt现在指向这个新对象!
//    注意:之前那个a="aa"的对象现在没有任何引用了,会被GC回收,根本没加到列表里
testt = new Test();

// 3. 把当前testt指向的这个新Test对象(此时a还是null)添加到列表里
list.add(testt);

// 4. 因为testt还是指向刚才加到列表里的那个对象,所以修改它的a属性,本质是修改列表中那个对象的属性
testt.a = "cc";

解答你的两个疑问

  1. 为什么ListView不是空的?
    你确实调用了list.add(testt),往列表里添加了一个Test对象(虽然刚加进去的时候它的a是null),所以列表不是空的,ListView自然能显示内容。

  2. 为什么显示的是"cc"(你写的"c"应该是笔误)?
    因为Java里对象是引用类型,testt变量存的是对象的内存地址。你把testt指向的对象加到列表后,后续修改testt.a,其实是修改列表里那个对象的属性——它们指向的是同一个内存地址的对象。再加上你的Test类重写了toString()方法返回a,所以ListView最终显示的是你后来赋值的"cc"。

如果你想保留第一个"aa"的对象,应该这么改

要是你想把两个Test对象都加到列表里,得在重新赋值testt前把第一个对象加进去:

testt = new Test();
testt.a = "aa";
list.add(testt); // 先把第一个对象加进列表

testt = new Test();
testt.a = "cc";
list.add(testt); // 再加第二个对象

这样ListView就会显示"aa"和"cc"两个条目啦~

备注:内容来源于stack exchange,提问作者Ali Abbasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:37:47