list间元素拷贝值相同问题

来源:互联网 发布:信用卡账单生成软件 编辑:程序博客网 时间:2024/06/03 17:49

做项目时遇到一关于list间元素拷贝问题

问题描述:将list1中的第一个元素原封不动的拷贝到list2中,然后再将list1中第一个元素改变其部分属性拷贝到list2中,结果list2中接收到的两个元素值一样。

很诧异,研究了一下,大概原因是:list2中拷贝过去的是list1元素的引用,并非其值。(举个例子来说明……)

 

 

//构造一个list,只包含一个Person型的元素
  Person p1 = new Person("n1",11);
  List<Person> list1 = new LinkedList<Person>();
  list1.add(p1);
  
  
  
  
  List<Person> list2 = new LinkedList<Person>();
  
  //将list1中的元素去除放到list2中
  Person person1 = list1.get(0);
  list2.add(person1);
  
  //将list1中元素属性更改,取出并放入list2中,此时list2中有两个元素
  list1.get(0).setName("Y1");
  Person person2 = list1.get(0);
  list2.add(person2);
  
  //判断list2中两个元素的引用是否相同---结果为true
  System.out.println(person1 == person2);
  
  for(int i = 0; i < list2.size(); i++){
   System.out.println(list2.get(i).getName());//期盼结果为n1 Y1;实际结果为:Y1 Y1
  }
  
  
  //将一个list中的元素拷贝到另一个list中,不是元素值拷贝,而是引用拷贝。(将list1中p1拷贝到list2中,然后再将list1中p1改变一下name值,再拷贝到list2中,list2中得到的虽然是两个元素,但此两个元素的引用相同,则值必也相同)

0 0
原创粉丝点击