Java 第i个元素中的值更改会影响ArrayList的第0个元素中的值
我有以下代码通过迭代设置值Java 第i个元素中的值更改会影响ArrayList的第0个元素中的值,java,arraylist,Java,Arraylist,我有以下代码通过迭代设置值 for (int i=0; i<list.size(); i++){ QuestionaireResult item = list.get(i); List<QuestionaireResultDetail> rsDetails = item.getQuestionaireResultDetails(); List<QuestionaireResultDetail> filledList = fillList2(
for (int i=0; i<list.size(); i++){
QuestionaireResult item = list.get(i);
List<QuestionaireResultDetail> rsDetails = item.getQuestionaireResultDetails();
List<QuestionaireResultDetail> filledList = fillList2(rs.getQuestionaireResultDetails(), rsDetails);
item.setQuestionaireResultDetails(insertCommentObj3(insertCommentObj3(filledList, "C"), "B"));
QuestionaireResultDetail qr2 = new QuestionaireResultDetail();
qr2.setAnswerDesc(item.getRemark());
item.getQuestionaireResultDetails().add(qr2);
list.set(i, item);
}
for(int i=0;i根据到目前为止给出的描述和代码,我认为只有两个可能的(合理的)原因:
- 第i项和第0项是相同的
- 涉及到静态变量
第一种情况可能发生,例如,当列表按如下方式填充时:
List<Item> list = new ArrayList<Item>();
Item item = new Item();
for (int i=0; i<3; i++)
{
item.setSomeProperty(i);
list.add(item);
}
在这种情况下,您只需确保字段不是静态的
如果两者都不是,那么您提供的代码就不足以找到奇怪行为的原因。由于您的代码不完整,我根据自己的经验回答
您的列表
是一个类型为问题结果详细信息
的对象数组列表
现在,ArrayList
存储了对象。因此,当您将对象添加到ArrayList时,它实际上并没有创建副本对象,而是引用了原始对象。因此,一个对象中的任何更改都将反映到该对象的所有副本中
例如:
Object A= 12;
Object B=A;
B=10;
将A的值设为10。因为A和B指向同一位置。您应该只发布相关代码。而您得到的输出请显示fillList2函数代码I删除不相关的代码now@RomanKonoval实际上,该代码不应该与此问题相关,谢谢
class Item
{
private static int someProperty;
public void setSomeProperty(int i)
{
someProperty = i;
}
}
Object A= 12;
Object B=A;
B=10;