Java 为什么存储在arrayList中的每个对象的内容都有相同的值?

Java 为什么存储在arrayList中的每个对象的内容都有相同的值?,java,list,for-loop,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

我有一个简单的代码,通过'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";
}
控制台输出来自:

System.out.println(list);
在表示
列表的
for
语句之外,每个对象显示相同的内容

[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]
]
我想做的是创建一个列表,其中包含具有不同值的对象。 我想代码有问题。
我认为
ArrayList
中的
add()
方法将参数值附加到现有列表对象。有人知道为什么会发生这种情况吗?

列表中只存储一个
供应商
对象(添加同一对象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);
}
List List=new ArrayList();
int number=ss.maxNum(供应商);
对于(int i=0;i<5;i++){
供应商=新供应商();
供应商设置编号(编号+i);
供应商名称(“供应商”+i);
供应商。setDel(“n”);
供应商地址(“地址”+i);
列表。添加(供应商);
系统输出打印项次(i+“:”+供应商);
}

您一次又一次地将相同的
供应商添加到
列表中。这将导致反复调用
供应商
设置程序,并修改
列表中的每个
供应商
。因此,每个
供应商都与上一个供应商相同

关键是在每次迭代中创建一个新的
供应商
,并将其添加到
列表中

List<Supplier> list = new ArrayList<Supplier>();
int number = ss.maxNum(supplier);
for (int i = 0; i < 5; i++) {
    Supplier supplier = new Supplier();
    // Supplier setters
    list.add(supplier);
}
List List=new ArrayList();
int number=ss.maxNum(供应商);
对于(int i=0;i<5;i++){
供应商=新供应商();
//供应商设定者
列表。添加(供应商);
}

它可以工作:)thx@ConnorLee你很好,它成功了,谢谢:)
List<Supplier> list = new ArrayList<Supplier>();
int number = ss.maxNum(supplier);
for (int i = 0; i < 5; i++) {
    Supplier supplier = new Supplier();
    // Supplier setters
    list.add(supplier);
}