gpt4 book ai didi

java - 第 i 个元素的值更改会影响 ArrayList 第 0 个元素的值

转载 作者:行者123 更新时间:2023-12-01 13:12:14 26 4
gpt4 key购买 nike

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

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

但是,我发现我在第 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);
}

在这种情况下,您应该确保为列表中的每个条目创建一个项目:

List<Item> list = new ArrayList<Item>();
// Item item = new Item(); // Don't create a single instance here
for (int i=0; i<3; i++)
{
Item item = new Item(); // Instead, always create a new instance
item.setSomeProperty(i);
list.add(item);
}

第二个可能涉及一些静态变量,如本例所示

class Item
{
private static int someProperty;

public void setSomeProperty(int i)
{
someProperty = i;
}
}

在这种情况下,您只需确保该字段不是静态

如果两种情况都不是,那么您提供的代码不足以找到奇怪行为的原因。

关于java - 第 i 个元素的值更改会影响 ArrayList 第 0 个元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22757112/

26 4 0