将java对象添加到ArrayList

时间:2018-02-01 13:15:16

标签: java arraylist

当我执行此代码段时,我希望:

  • row(0)=(paul,30)
  • row(1)=(john,20)

但我不明白为什么我得到:row(0)=(john,20)和row(1)=(john,20)

public class main {

public static void main(String[] args) throws Exception {

    ArrayList<Classname> yourList = new ArrayList<Classname>();

    Classname cl = new Classname();

    cl.Name="paul";
    cl.Age=30;
    yourList.add(cl);

    cl.Name="john";
    cl.Age=20;
    yourList.add(cl);

    System.out.println("List row 0 = "+yourList.get(0).Name+" - "+yourList.get(0).Age);
    System.out.println("List row 1 = "+yourList.get(1).Name+" - "+yourList.get(1).Age);
}
class Classname{

    public String Name;
    public Integer Age;
}

提前谢谢!

2 个答案:

答案 0 :(得分:3)

您创建了一个Classname对象,然后cl引用了该对象。对于每个对象,您必须创建自己的引用:

Classname cl1 = new Classname();

cl1.Name="paul";
cl1.Age=30;
yourList.add(cl1);

Classname cl2 = new Classname();
cl2.Name="john";
cl2.Age=20;
yourList.add(cl2);

答案 1 :(得分:2)

因为:

之间存在差异
Classname cl = new Classname();

cl.Name="paul";
cl.Age=30;
yourList.add(cl);

cl.Name="john";
cl.Age=20;
yourList.add(cl);

Classname cl1 = new Classname();
Classname cl2 = new Classname();

cl1.Name="paul";
cl1.Age=30;
yourList.add(cl1);

cl2.Name="john";
cl2.Age=20;
yourList.add(cl2);

第一个版本创建只有一个对象。然后,将引用添加到ArrayList的该对象。然后,您修改同一个对象,为其添加新的NameAge确实会影响在列表中的表示,因为您没有将该对象的任何副本添加到列表中 - 您添加了一个引用。

第二个版本创建两个具有不同属性的独立对象,并将其引用放入列表中,从而产生您正在寻找的行为