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;