为了账号安全,请及时绑定邮箱和手机立即绑定

函数添加(到列表中)做一些奇怪的事情

函数添加(到列表中)做一些奇怪的事情

白衣染霜花 2021-05-11 20:26:12
我有一个看起来很蠢的问题,但已经停滞了3个小时。当我在arrayList中添加一个元素时,我不添加我应该添加的元素。基本上在Sysout上,您可以看到我应该拥有的值,在B上的值上,您可以看到我仅添加了最后一个值...private List<ContextSchemeValue> ConvertCodeListIntoContextSchemeValue (List<CodeListValue> A){   ContextSchemeValue C= new ContextSchemeValue();   List<ContextSchemeValue> B = new ArrayList<>();   for (int i = 0; i < A.size(); i=i+1) {         C.setContextScheme(contextScheme);         C.setMeaning(A.get(i).getName());         C.setValue(A.get(i).getValue());         System.out.println("   C"+i+" = "+C);         B.add(C);     }    System.out.println("            B =" + B);    return B;}C0 = ContextSchemeValue {ctxSchemeValueId = 0,guid ='null',value ='fefe',意思是'fefe',contextScheme = ContextScheme {ctxSchemeId = 0,guid ='null',schemeId ='null',schemeName ='null ',description ='null',schemeAgencyId ='2',schemeVersionId ='99999',contextCategory = null,createdBy = 0,lastUpdatedBy = 0,creationTimestamp = null,lastUpdateTimestamp = null}}C1 = ContextSchemeValue {ctxSchemeValueId = 0,guid ='null',value ='efefewfeasf',含义='efewfw',contextScheme = ContextScheme {ctxSchemeId = 0,guid ='null',schemeId ='null',schemeName ='null ',description ='null',schemeAgencyId ='2',schemeVersionId ='99999',contextCategory = null,createdBy = 0,lastUpdatedBy = 0,creationTimestamp = null,lastUpdateTimestamp = null}}C2 = ContextSchemeValue {ctxSchemeValueId = 0,guid ='null',value ='fef',意味着='fwefefef',contextScheme = ContextScheme {ctxSchemeId = 0,guid ='null',schemeId ='null',schemeName ='null ',description ='null',schemeAgencyId ='2',schemeVersionId ='99999',contextCategory = null,createdBy = 0,lastUpdatedBy = 0,creationTimestamp = null,lastUpdateTimestamp = null}}我真的不明白为什么add函数会不断添加最后一个值,而不是另一个,我在每个i上打印了该值,非常感谢您的帮助!
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

问题是您要将相同的C对象添加到列表中三次,然后在循环中更改相同的对象三次。该列表不包含三个不同的对象,它包含对同一对象的三个引用。

当你写的时候:

C.setValue(A.get(i).getValue())

您正在更改的价值C,而不是创建新的C。如果您已经C在列表中引用了它们,那么它们也将被更改。

我对ContextSchemeValues并不熟悉,但是您每次都需要创建一个新对象,而不是重复使用同一对象3次,然后将对同一对象的三个引用添加到列表中。


查看完整回答
反对 回复 2021-05-26
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信