对象Person ,当我点击“随机”按钮生成一个person实例,点击“插入”时,将Person插入到ArrayList中,
但插入后,所有值都变成一样了,为什么?public class Data {
 private ArrayList<Person> all = new ArrayList<Person>();
 public void addToAll(Person person){
   all.add(person);
 }
 ...setter getter
}
public class test { Person person = new Person();
 Data data = new Data(); public void random(MouseEvent evt){
  //生成person
 } public void insert(MouseEvent evt){
  data.addToAll(person);     // 添加完后所有值都变一样了
 }

解决方案 »

  1.   

     Person person = new Person();
    你只创建了一个对象!所以地方的操作都是对该对象的引用,而不是复制了一个对象。public class test { Person person =null; //改为null
     Data data = new Data(); public void random(MouseEvent evt){
      person = new Person(); //这里
      //生成person
     } public void insert(MouseEvent evt){
      data.addToAll(person);     // 添加完后所有值都变一样了
     }

      

  2.   

    看你标题就知道你问题大概出在哪了 Person person = new Person();
     Data data = new Data(); public void random(MouseEvent evt){
      //生成person
     }
    你在随机生成person的时候是不是直接用的上面已经定义好的那个person而不是重新new出一个来,形如Person person = new Person();
     Data data = new Data(); public void random(MouseEvent evt){
      person = ...;
     }
    这样加入进去的都是一样的,因为你向list中加入的只是一个Person的引用person,person只能是指向一个Person实例.当你在后面更行person的时候,前面的引用也会跟着变的.(可能这地方说的不是太清楚)
    正确的添加方法是:Person person = null;
     Data data = new Data(); public void random(MouseEvent evt){
      person = new Person();
      person =....;
     }这样你每次执行random()方法是person变量都不是同一个,他所指向的Person也不会相同了
    可能有点罗嗦,只是希望你能看明白
      

  3.   

    public class test { Person person = new Person();
     Data data = new Data(); public void random(MouseEvent evt){
      //生成person
     }先声明一个Person的对象,把实现放到你的random里,再插入就可以了
      

  4.   

    每次要生成一个新的person对象插入到list中,而不要用原来的person对象。