当我执行此代码段时,我希望:
但我不明白为什么我得到: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;
}
提前谢谢!
答案 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
的该对象。然后,您修改同一个对象,为其添加新的Name
和Age
。 确实会影响在列表中的表示,因为您没有将该对象的任何副本添加到列表中 - 您添加了一个引用。
第二个版本创建两个具有不同属性的独立对象,并将其引用放入列表中,从而产生您正在寻找的行为