java - 为什么 arrayList 中存储的每个对象的内容具有相同的值?

标签 java list for-loop arraylist

我有一个简单的代码,通过“for”迭代器将多个对象存储到 ArrayList 中。

@RequestMapping("dataInsert")
public String dataInsert(String pageNum, Model model) {

    Supplier supplier = new Supplier();
    List<Supplier> list = new ArrayList<Supplier>();
    int number = ss.maxNum(supplier);
    for (int i = 0; i < 5; i++) {
        supplier.setNum(number + i);
        supplier.setName("supplier" + i);
        supplier.setDel("n");
        supplier.setAddr("address" + i);

        list.add(supplier);

        System.out.println(i + " : " + supplier);   
    }

    System.out.println(list);
    int result = ss.insertList(list, supplier);

    model.addAttribute("result", result);
    model.addAttribute("pageNum", pageNum);
    return "supplier/Insert";
}

下面的控制台输出显示了对象的迭代数量:

0 : Supplier [num=13, name=supplier0, tel=null, addr=address0, del=n]
1 : Supplier [num=14, name=supplier1, tel=null, addr=address1, del=n]
2 : Supplier [num=15, name=supplier2, tel=null, addr=address2, del=n]
3 : Supplier [num=16, name=supplier3, tel=null, addr=address3, del=n]
4 : Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n]

控制台输出来自:

System.out.println(list);

for 之外代表 List 的语句每个对象显示相同的内容。

[Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n],
Supplier [num=17, name=supplier4, tel=null, addr=address4, del=n]
]

我想要做的是创建一个包含具有不同值的对象的列表。 我猜代码有问题。 我以为add() ArrayList中的方法正在将参数值附加到现有列表对象。有谁知道为什么会发生这种情况吗?

最佳答案

您仅在 List 中存储一个 Supplier 对象(您添加同一对象 5 次),并且在循环中不断修改它。

您应该为循环的每次迭代创建一个新实例:

List<Supplier> list = new ArrayList<Supplier>();
int number = ss.maxNum(supplier);
for (int i = 0; i < 5; i++) {
    Supplier supplier = new Supplier();
    supplier.setNum(number + i);
    supplier.setName("supplier" + i);
    supplier.setDel("n");
    supplier.setAddr("address" + i);

    list.add(supplier);
    System.out.println(i + " : " + supplier);
}

关于java - 为什么 arrayList 中存储的每个对象的内容具有相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693618/

相关文章:

java - 归一化 double 值时的 NAN

c# - 当列表中的一项发生变化时,我希望不同列表中的相同项目也进行更新

vb.net - 如何将值插入(字符串,列表(字符串))字典的列表部分?

c++ - 使用代码块编译和运行无限循环

python - 循环遍历 numpy 矩阵

java - 如何将具有一长串通用列的表映射到 JPA 实体

java - 自定义阵列适配器返回空白屏幕?

java - 在 RecyclerView 中显示项目

python - 将一列字符串转换为 pandas 中的列表

c - 如何将二进制数组转换为单个变量?