Android进阶(四)一个APP引发的思索之ArrayList的add总是添加相同的值
2015-04-21 18:30
579 查看
解决“ArrayList的add总是添加相同的值”问题
前言
最近在写一个小的Android APP,在用ArrayList的add时,总是出现添加相同值的现象。如下图所示:错误结果
代码如下:
listItem = new HashMap<String, Object>(); for (Item item : resultItems) { // 获取相关车次 listItem.put("Station_train_code", item.getStation_train_code()); System.out.println(listItem); listItems.add(listItem); }
经过一番思索后,更改后的源码如下:
for (Item item : resultItems) { listItem = new HashMap<String, Object>(); // 获取相关车次 listItem.put("Station_train_code", item.getStation_train_code()); System.out.println(listItem); listItems.add(listItem); }后经查阅资料得知,若将listItem = new HashMap<String, Object>();置于for循环体外的话,listItem只存在一个对象,而listItems.add(listItem);时,只是把listItem的引用传进去了。故listItems中存放的值都是最后一个listItem的值。其内存分配示意图如下图所示:
内存分配示意图
若将listItem = new HashMap<String, Object>();置于for循环体内的话,则会在每一次循环中创建一个新的listItem对象。从而在执行listItems.add(listItem);时,会把不同的listItem对象的引用传给listItems,从而得到正确结果,如下图所示:
正确结果
注
其实在Java中,也可以这样理解:java中是存在指针的!对于基本数据类型(应该是那8种吧),java传的是值,非基本类型,传的是引用!美文美图
相关文章推荐
- Android进阶(四)一个APP引发的思索之ArrayList的add总是添加相同的值
- App 冷启动:给 Android 的 Activity 添加一个背景
- App 冷启动:给 Android 的 Activity 添加一个背景
- ArrayList总是添加相同的Element
- 同一个android手机同时安装2个相同app
- ArrayList.add()添加一个元素后,会把前面一个元素覆盖
- Android上实现一个简单的天气预报APP(四) 添加按钮点击响应
- 简洁大方,为自己的Android App添加一个ContextMenu
- 简洁大方,为自己的Android App添加一个ContextMenu
- 【Android进阶】如何写一个很屌的动画(3)---高仿腾讯手机管家火箭动画
- android app 添加logo
- Android App添加广告
- Android在一个APP中通过包名或类名启动另一个APP
- android中如何添加一个监听按钮,点击之后从一个activity跳转到另一个activity
- Android系统中添加一个产品----图文详解
- Android 如何从一个APP中打开另外一个APP,实现二者通信
- Android APP 添加按键
- 没有经验三天开发一个Android app(第一天 demo级)
- 优秀自定义控件开源项目推荐:让你的app提升一个档次-Android酷炫自定义控件
- 在Eclipse添加Android兼容包( v4、v7 appcompat )