如果我输出temp变量,列表不能正确保存值

时间:2013-11-06 14:36:08

标签: android arraylist

我的Java和Android列表存在问题。我使用以下代码阅读并保存列表中的所有用户联系人:

List<ContactInfo> list = new ArrayList<ContactInfo>();
ContactInfo contactInfo = new ContactInfo();

do {
    contactInfo.name   = people.getString(indexName);
    contactInfo.phone  = people.getString(indexNumber);

    list.add(contactInfo);

} while (people.moveToNext());

在do-while一切正常的情况下,名称和手机是正确的,但是列表没有正确保存值(具体来说,它正确保存了值,但是在执行时 - 每个值都被替换为最后一个值插值)。 它只是保存了每个位置的最后一次接触,但是如果我尝试调试他在每个位置添加的内容,那么它会显示正确的值。

这是我用来检查do-while

中每个项目的代码
int i = 0;
for(ContactInfo info : list)
{
    Log.d(newMessage.TAG, "contactInfo(" + i + "): name = " + info.name + " ; phone = " + info.phone);
    ++i;
}

我已修复此修改的问题:

do {
    contactInfo = new ContactInfo();

    contactInfo.name   = people.getString(indexName);
    contactInfo.phone  = people.getString(indexNumber);

    list.add(contactInfo);

} while (people.moveToNext());

它为每个联系人创建了一个不同的ContactInfo实例,但是如果我在do-while中创建了一个,那为什么不起作用呢?

而且,如果我为每个联系人创建一个不同的实例,如果联系人的数量太多,它可能会导致内存泄漏/内存不足或类似情况?或者可能只是让应用程序变慢,因为GC应该清除内存?

1 个答案:

答案 0 :(得分:1)

问题是当你按照自己的方式进行操作时,对象将是相同的。对象的对象引用始终是相同的,因此唯一的对象是将它添加到第一个对象中。

迎接