new 对象在 for循环外和内的区别

本文详细解析了Java编程中,在循环内修改对象属性并添加到集合时,出现重复对象引用的问题。通过调整代码结构,确保每次循环创建新对象,避免了属性值被后续操作覆盖,最终实现了正确收集不同数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List list = new ArrayList(10);
IsuApiViews isuApiViews = new IsuApiViews();
page=super.findPage(page, isuViews);
List listView = page.getList();
int size = listView.size();
if (null!=listView&&size>0) {
for(IsuViews isuViewsNew:listView) {

			isuApiViews.setIsuTopViews(isuViewsNew);
			String id = isuViewsNew.getId();
			IsuViews queryIsuView = new IsuViews();
			queryIsuView.setViwTopId(id);
			
			List<IsuViews> listSonViews = super.findList(queryIsuView);
			isuApiViews.setIsuSonViewsList(listSonViews);
			list.add(isuApiViews);
			
		}
	}

数据库查出是有3条不一样的数据,但是接口输出时出现3条一样的数据。
原因分析:isuApiViews 在for循环外部,说明从始至终只有一个isuApiViews 对象,在for循环里面每次虽然改变isuApiViews 属性值,但是list.add时添加的都是同一个对象。所以,后一个isuApiViews 变化的属性值会覆盖前面list.add里面的isuApiViews 。
所以输出的3条一样的数据,存的是同一个引用地址,指向同一个对象数据。
List list = new ArrayList(10);

	page=super.findPage(page, isuViews);
	List<IsuViews> listView = page.getList();
	int size = listView.size();
	if (null!=listView&&size>0) {
		for(IsuViews isuViewsNew:listView) {
				IsuApiViews isuApiViews = new	IsuApiViews();
			isuApiViews.setIsuTopViews(isuViewsNew);
			String id = isuViewsNew.getId();
			IsuViews queryIsuView = new IsuViews();
			queryIsuView.setViwTopId(id);
			
			List<IsuViews> listSonViews = super.findList(queryIsuView);
			isuApiViews.setIsuSonViewsList(listSonViews);
			list.add(isuApiViews);
			
		}
	}

new的操作放到for循环内部,每次都是新建一个对象。list.add存三个不同的引用,指向三个不同对象。所以list里面是三条不同的记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值