java中集合存储对象的问题的一点思考

本文通过一个具体的编程实例说明了在循环体内实例化对象的原因及其重要性。当对象实例化放在循环外部时,会导致所有元素引用同一个对象,进而使得最终结果集中所有对象的数据相同。文章强调了理解对象引用与值传递的区别对于避免此类错误至关重要。

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

最近写程序,写了一段很傻的代码,还把自己给绕进去了。

先直接上代码片段:

                FlowInstance flowInstance;
		List<FlowInstance> flowInstanceList = new ArrayList<FlowInstance>();
		Integer status = null;
		long tempFlowInstanceId;
		for(FlowInstanceEntity flowInstEntity : flowInstanceEntityList){
			flowInstance = new FlowInstance();
			status = flowInstEntity.getStatus();
			tempFlowInstanceId = flowInstEntity.getFlowInstanceId();
			flowInstEntity.setFlowInstanceId(null);
			flowInstEntity.setStatus(null);
	        BeanUtils.copyProperties(flowInstEntity, flowInstance);
	        flowInstEntity.setFlowInstanceId(tempFlowInstanceId);
	        flowInstance.setFlowInstanceId(InstanceIDCovertor.convertFlowInstIdToString(flowInstEntity));
	        flowInstance.setStatus(FlowInstStatus.getDAGStatusByCode(status));
	        flowInstance.setGroupName(getGroupNameByGroupId(groupEntitys, flowInstEntity.getGroupId()));
	        flowInstanceList.add(flowInstance);
		}
		
		return flowInstanceList;

基本上就是取出list中对数据,加工一下重新组装成一个对象,又放进一个list中去,最后返回。

但是实际写代码对时候,犯了一个打错,也就是第一行,原来对错误写法是:
FlowInstance flowInstance = new FLowInstance();也就是说将创建对象实例在循环体外面执行,结果导致最后返回对list数据都是相同的。

想想其实很可笑,连最基本的集合存储都忽视了。

原因:我们知道集合对象中存储都是对象都引用,比如List flowList = new ArrayList(5); 分配了5个对象的空间,但是,往list中存放数据的时候,如果add进去的是相同的对象,不管后面循环的时候,如何改变对象的值,最终list中存放的对象都是相同的,都是和最后放进list的对象一样。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值