list存储引用类型注意的问题

今天做到从数据库中取出数据然后存入实体类的对象,然后将对象放到list集合中,后来发现取出来的数据全是一样的

这个是我的程序代码:

	public  List<IdAndName> getAllIdandName(String sql) throws Exception{
	     Course course=new Course();
	     List<Course> list=new ArrayList<Course>();
	     list=getList(sql);
	     IdAndName idName=new IdAndName();
	     List<IdAndName> ls=new ArrayList<>();
	     for(int i=0;i<list.size();i++)
	     {
	    	
	    	 idName.setId(list.get(i).getId());
	    	 idName.setName(list.get(i).getCourseName());
	    	 System.out.println(idName.toString());
	    	 ls.add(idName);
	    }
        return ls;
	  }
在什么面的代码中我希望是返回一个list,里面存着的对象是不同的,但是发现list中的对象全部都是相同的,问题在循环里面,循环中每一次我都是更新对象idName的id和name属性,以为这样存进去的就是不同的对象,但是我没有想到的是list存对象的时候,是存入的对象的在堆中的内存地址,虽然我每次都更新这个idName对象的属性值,但是存到最后,还是只存进了一个对象。

在输出结果中我们可以看到:

com.entity.IdAndName@25a56154
com.entity.IdAndName@25a56154
com.entity.IdAndName@25a56154
com.entity.IdAndName@25a56154
在堆中是一样的,那么我们怎样来解决这样的问题,获取到不同的对象,这个就是需要我们每次存入的不是同一个对象,我们将new放入循环的内部就可以解决了

如下:

	public  List<IdAndName> getAllIdandName(String sql) throws Exception{
	     Course course=new Course();
	     List<Course> list=new ArrayList<Course>();
		 list=getList(sql);
	    
	     List<IdAndName> ls=new ArrayList<>();
	     for(int i=0;i<list.size();i++)
	     {
	    	 IdAndName idName=new IdAndName();
	    	 idName.setId(list.get(i).getId());
	    	 idName.setName(list.get(i).getCourseName());
	    	 System.out.println(idName.toString());
	    	 ls.add(idName);
	    }
        return ls;
	  }
最后输出结果:
com.entity.IdAndName@124b943a

com.entity.IdAndName@1141b3a1
com.entity.IdAndName@2eb14c88
com.entity.IdAndName@476b9ef1

这样ls每次存入的就是不同的对象,取出来的时候自然也不同,这个很基础,但是平时也容易忽略,想知道更多可以去百度找引用的数据类型的存储问题。

希望对你有所帮助。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值