ArrayList中add后数据被覆盖的探索

先看这段代码,思路是:从Edittext中得到字符,然后构造成实体类,再传递给ArraryList的add

button_send_TextContent.setOnClickListener(new OnClickListener() {
			@Override
			public 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() {
			@Override
			public 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();
	}

有没有发现不一样的?,对就是
sendTextContainter.getText().toString()

上面没有使用tostring()的方法,所以导致,可见的tostring后虚拟机会给字符分配新的存储地址,导致引用不一样

UserTallGalleryBean的setSendContent的数据都是同一个引用,所以打印出来的数据都是一样的,而不是UserTallGalleryBean的问题,还有但当

sendTextContainter这个edittext再次被getstring()时,ArrayList的数据还是会改变的(没有用tostring情况下),所以会造成button_send_TextContent.setOnClickListener事件还没发生,arraylist的数据就已经被覆盖了,那么官方为啥在edittext的gettext中得到同一个对象呢?呵呵,想想如果得到的是不同对象的引用,那得消耗多少内存



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值