ArrayList中add后数据被覆盖的探索
来源:互联网 发布:淘宝订单管理 编辑:程序博客网 时间:2024/05/02 04:52
先看这段代码,思路是:从Edittext中得到字符,然后构造成实体类,再传递给ArraryList的add
button_send_TextContent.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {UserTallGalleryBean test = new UserTallGalleryBean();test.setSendContent(sendTextContainter.getText());test.setUserId(10905512);adapter.addDataListItem(test);}});
//添加数据public void addDataListItem(UserTallGalleryBean bean){if(datalist!=null)datalist.add(bean);Iterator<UserTallGalleryBean> iterator = datalist.iterator();while(iterator.hasNext()){Log.i("face", "--->>>"+(iterator.next()).getSendContent());} //this.notifyDataSetChanged();}
最后发现ArrayList的数据都一样了,毋庸置疑,引用问题,引用好比指针,都是一一对应的,但一看觉得我的代码没有问题啊,UserTallGalleryBean都是new后才用的,所以引用都是不一样的,刚开始我也是这么觉得的,所以我重写了UserTallGallery的toString(),在构造器里给toString付动态的数据(即每个new 后都有不同的toString,让后我们打印UserTallGalleryBean的对象就可以知道是不是同一个引用了,当然,你也可以直接用hashcode),最后还是发现addDataListItem是不同的引用,下面再看看修改后的
button_send_TextContent.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {UserTallGalleryBean test = new UserTallGalleryBean();test.setSendContent(sendTextContainter.getText().toString());test.setUserId(10905512);adapter.addDataListItem(test);}});
//添加数据public void addDataListItem(UserTallGalleryBean bean){if(datalist!=null)datalist.add(bean);Iterator<UserTallGalleryBean> iterator = datalist.iterator();while(iterator.hasNext()){Log.i("face", "--->>>"+(iterator.next()).getSendContent());} //this.notifyDataSetChanged();}
有没有发现不一样的?,对就是
上面没有使用tostring()的方法,所以导致,可见的tostring后虚拟机会给字符分配新的存储地址,导致引用不一样sendTextContainter.getText().toString()
UserTallGalleryBean的setSendContent的数据都是同一个引用,所以打印出来的数据都是一样的,而不是UserTallGalleryBean的问题,还有但当
sendTextContainter这个edittext再次被getstring()时,ArrayList的数据还是会改变的(没有用tostring情况下),所以会造成button_send_TextContent.setOnClickListener事件还没发生,arraylist的数据就已经被覆盖了,那么官方为啥在edittext的gettext中得到同一个对象呢?呵呵,想想如果得到的是不同对象的引用,那得消耗多少内存
0 0
- ArrayList中add后数据被覆盖的探索
- ArrayList.add后,前面数据被覆盖的问题
- ArrayList.add后,前面数据被覆盖的问题
- ArrayList.add(Object) 前面数据被覆盖的问题
- java ArrayList add()方法数据被覆盖问题
- 在arraylist添加对象后被覆盖
- oracle9i利用UNDO闪回,前提是被删除的数据在UNDO中没有被覆盖
- 重装Windows后LILO被覆盖的解决办法
- 重装多系统ubuntu被覆盖后的解决方法
- list里面数据被覆盖
- 内存变量被覆盖的调试(数据断点调试)
- 多线程使用中:对像被覆盖的BUG
- Ubuntu Server 中resolv.conf重启时被覆盖的问题
- Ubuntu Server 中resolv.conf重启时被覆盖的问题
- 对象传参数中引用是否被覆盖的情形
- 解决List的add方法错使前面的元素被覆盖成相同值
- 解决方案--duilib中edit获得鼠标焦点后右边框被覆盖
- IE中网页下拉菜单被覆盖
- linux apache 学习笔记
- UVa LA 3026 Period
- 解决iOS应用内购买报错:invalidProductIdentifiers
- 关于asp.net网站URLRewriter开发布署IIS中遇到的问题
- 延迟----java Thread.sleep()
- ArrayList中add后数据被覆盖的探索
- CPWSGIServer
- MFC 学习之 CDC & HDC
- 借助JavaEE中Timer API实现定时关闭计算机的功能
- 自制简单Trie树
- JAVA学习笔记41——引用类型比较2:新闻排序应用+商品排序应用
- 分享45个android实例源码,很好很强大.收藏吧!!!
- 算法精解一(C语言版)
- android SharedPreferences工具类