Android:ArrayList存储奇怪的值

时间:2016-03-15 15:16:59

标签: java android arraylist

我只是不明白这里发生了什么。

ArrayList<ListItem> list=new ArrayList<ListItem>();
ListItem curItem=new ListItem();
String[] contents=cwFile.list();
for(int i=0;i<contents.length;i++){
    curItem.itemName = contents[i];
    if(new File(cwd+contents[i]).isDirectory()){
        curItem.isDir=true;
    }
    list.add(i,curItem);
}
Log.i("Main",list.get(0).itemName);
Log.i("Main",contents[0]);

所以在这段代码片段中,我使用File.list()方法获取目录的内容

然后,我将名称存储在ArrayListListItem个对象中,其中ListItem是一个自创的类。

但是,ListItem只是一个存储字符串

的类
class ListItem {
    protected String itemName ="";
    protected boolean isDir=false;
    protected Double size=0.0;
}

但是,在记录了数组和ArrayList的第一个元素(第一个代码片段的最后两行)之后,我得到了不同的结果!

这是日志输出:

03-15 20:29:46.427 465-465/com.harshal.filer I/filer: .userReturn
03-15 20:29:46.427 465-465/com.harshal.filer I/filer: Android

第二个输出,&#34; Android&#34;是设备上的实际目录。 但是&#34; .userReturn&#34;它来自哪里???

1 个答案:

答案 0 :(得分:2)

将您的代码更改为以下内容:

ArrayList<ListItem> list=new ArrayList<ListItem>();
String[] contents=cwFile.list();
for(int i=0;i<contents.length;i++){
    ListItem curItem=new ListItem();
    curItem.itemName = contents[i];
    if(new File(cwd+contents[i]).isDirectory()){
        curItem.isDir=true;
    }
    list.add(i,curItem);
}
Log.i("Main",list.get(0).itemName);
Log.i("Main",contents[0]);

你看我搬家了

 ListItem curItem=new ListItem();

进入for循环。如果它在列表中位置0的项目引用之外,将始终指向数组中的最新条目,因此结果很奇怪。