QuestionaireResultDetail

QuestionaireResultDetail

我有以下代码通过迭代来设置值。

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);
 }


但是,我发现我对ith元素进行了更改,第0元素也将其值更改为ith元素,但是我认为我没有更改。有人可以给我建议为什么会发生吗?

首先谢谢。

最佳答案

由于您的代码不完整,因此我根据我的经验进行回答。

您的List<QuestionaireResultDetail>是类型为QuestionaireResultDetail的对象的ArrayList。

现在ArrayList存储了对象。因此,当您将一个对象添加到ArrayList时,实际上并不是创建一个副本对象,而是实际上是对原始对象的引用。因此,一个对象的任何更改都将反映到该对象的所有副本中。

例如:

Object A= 12;
Object B=A;
B=10;


将A的值设为10。因为A和B指向相同的位置。

10-05 22:54